当前位置: 首页 > news >正文

专业网站策划 西安增加浏览量的软件

专业网站策划 西安,增加浏览量的软件,阜阳网站制作公司多少钱,小网站《TCP关闭的两种方法概述》里边理论基础,下边是列出代码,并且进行实验。 服务端代码graceserver.c的内容如下: #include "lib/common.h"static int count;static void sig_int(int signo) {printf("\nreceived %d datagrams\…

《TCP关闭的两种方法概述》里边理论基础,下边是列出代码,并且进行实验。
服务端代码graceserver.c的内容如下:

#include "lib/common.h"static int count;static void sig_int(int signo) {printf("\nreceived %d datagrams\n", count);exit(0);
}int main(int argc, char **argv) {int listenfd;listenfd = socket(AF_INET, SOCK_STREAM, 0);struct sockaddr_in server_addr;bzero(&server_addr, sizeof(server_addr));server_addr.sin_family = AF_INET;server_addr.sin_addr.s_addr = htonl(INADDR_ANY);server_addr.sin_port = htons(SERV_PORT);int rt1 = bind(listenfd, (struct sockaddr *) &server_addr, sizeof(server_addr));if (rt1 < 0) {error(1, errno, "bind failed ");}int rt2 = listen(listenfd, LISTENQ);if (rt2 < 0) {error(1, errno, "listen failed ");}signal(SIGINT, sig_int);signal(SIGPIPE, SIG_IGN);int connfd;struct sockaddr_in client_addr;socklen_t client_len = sizeof(client_addr);if ((connfd = accept(listenfd, (struct sockaddr *) &client_addr, &client_len)) < 0) {error(1, errno, "bind failed ");}char message[MAXLINE];count = 0;for (;;) {int n = read(connfd, message, MAXLINE);if (n < 0) {error(1, errno, "error read");} else if (n == 0) {error(1, 0, "client closed \n");}message[n] = 0;printf("received %d bytes: %s\n", n, message);count++;char send_line[MAXLINE];sprintf(send_line, "Hi, %s", message);sleep(5);int write_nc = send(connfd, send_line, strlen(send_line), 0);printf("send bytes: %zu \n", write_nc);if (write_nc < 0) {error(1, errno, "error write");}}
}

客户端代码graceclient.c内容如下:

# include "lib/common.h"
# define    MAXLINE     4096int main(int argc, char **argv) {if (argc != 2) {error(1, 0, "usage: graceclient <IPaddress>");}int socket_fd;socket_fd = socket(AF_INET, SOCK_STREAM, 0);struct sockaddr_in server_addr;bzero(&server_addr, sizeof(server_addr));server_addr.sin_family = AF_INET;server_addr.sin_port = htons(SERV_PORT);inet_pton(AF_INET, argv[1], &server_addr.sin_addr);socklen_t server_len = sizeof(server_addr);int connect_rt = connect(socket_fd, (struct sockaddr *) &server_addr, server_len);if (connect_rt < 0) {error(1, errno, "connect failed ");}char send_line[MAXLINE], recv_line[MAXLINE + 1];int n;fd_set readmask;fd_set allreads;FD_ZERO(&allreads);FD_SET(0, &allreads);FD_SET(socket_fd, &allreads);for (;;) {readmask = allreads;int rc = select(socket_fd + 1, &readmask, NULL, NULL, NULL);if (rc <= 0)error(1, errno, "select failed");if (FD_ISSET(socket_fd, &readmask)) {n = read(socket_fd, recv_line, MAXLINE);if (n < 0) {error(1, errno, "read error");} else if (n == 0) {error(1, 0, "server terminated \n");}recv_line[n] = 0;fputs(recv_line, stdout);fputs("\n", stdout);}if (FD_ISSET(0, &readmask)) {if (fgets(send_line, MAXLINE, stdin) != NULL) {if (strncmp(send_line, "shutdown", 8) == 0) {FD_CLR(0, &allreads);if (shutdown(socket_fd, 1)) {error(1, errno, "shutdown failed");}} else if (strncmp(send_line, "close", 5) == 0) {FD_CLR(0, &allreads);if (close(socket_fd)) {error(1, errno, "close failed");}sleep(6);exit(0);} else {int i = strlen(send_line);if (send_line[i - 1] == '\n') {send_line[i - 1] = 0;}printf("now sending %s\n", send_line);size_t rt = write(socket_fd, send_line, strlen(send_line));if (rt < 0) {error(1, errno, "write failed ");}printf("send bytes: %zu \n", rt);}}}}}

代码如上,想要跟我一样编译以后进行测试的话,需要先参考《网络编程实战课程使用Cmake第一次编译程序》进行编译,之后再来验证套接字上的closeshutdown两个函数。

实验一

在其中一个终端,输入./graceserver然后按下一个回车,打开服务器程序。
之后再打开一个终端,输入./graceclient 127.0.0.1然后按下一个回车,打开客户端程序,然后先验证套接字的close函数,快速在5秒内输出data1data2close三个字符串。
在这里插入图片描述
可以看到close函数直接就把客户端套接字的读写两个方向都关闭了。

实验二

在其中一个终端,输入./graceserver然后按下一个回车,打开服务器程序。
之后再打开一个终端,输入./graceclient 127.0.0.1然后按下一个回车,打开客户端程序,然后先验证套接字的close函数,快速在5秒内输出data1data2shutdown三个字符串。
在这里插入图片描述
这里可以看到shutdown只是先把客户端写方向关闭,但是读的方向还打开着,这就是为什么还能接受到服务器端的Hi, data1Hi, data2两个字符串。

此文章为11月Day 11学习笔记,内容来源于极客时间《网络编程实战》。

http://www.yayakq.cn/news/474961/

相关文章:

  • 顺德电子画册网站建设肇庆seo公司咨询23火星
  • 上海网络推广培训廊坊优化软件
  • 做360手机网站优化广告设计职业生涯规划书
  • 网站设计网站设计网站设计如何做网站的关键词排名
  • 网站改备案信息吗网络信息公司名字
  • 新手学网站建设解疑与技巧1200例邵阳隆回今天新闻头条
  • 用vs2008做网站视频教程网站开发实战第二章
  • 淘宝网作图做网站零基础怎么做电商
  • 内容相同的 网站网站开发过程
  • 营销型网站建设 代理成都培训机构排名前十
  • 创建网站的成本wordpress缩进
  • 深圳装修网站建设以绿色为主色调的网站
  • 中国最大的免费素材网站佛山企业管理咨询有限公司
  • 嘉兴营销型网站建设广州网站制作知名 乐云践新
  • 竞价推广托管开户友情链接seo
  • 专业做外贸英文公司网站我们便进入了()阶段
  • 合优做网站需要多少钱众筹 wordpress
  • 国外域名购买网站常州网站外包
  • 重庆点优定制网站建设wordpress微信登录插件下载
  • 国际购物网站排名安徽住房建设厅官网
  • 石家庄网站制作模板wordpress顶部空行
  • 网站原文件怎么上传空间快速网站模板公司
  • 松江做网站需要多少钱做网站做生意
  • 服装企业网站内容规划企业网站维护建设项目实践报告
  • 用discuz做网站如何设计好的网页
  • 网站开发仓库管理系统需求分析相亲网站源码php模版
  • 繁昌网站建设长沙建站官网
  • seo网站营销郴州网站
  • 如何申请建设网站首页二级域名的网站备案
  • 网站开发语言查询 蔡学镛廊坊做网站