.用select实现TCP并发服务器.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
.用select实现TCP并发服务器

介绍:运行在ubuntu linux系统,需要先打开一个终端运行服务端代码,这时,可以打开多个终端同时运行多个客户端代码(注意客户端数目要小于MAX_FD);在客户端输入数据后回车,可以看见服务器收到数据,并回复客户端确认信息,客户端输入:exit,按回车,该客户端关闭,在服务器端显示退出信息;所有客户端关闭后,服务器不会自动关闭,需要按ctrl+c强制关闭。 服务器端代码: #include stdio.h #include unistd.h #include stdlib.h #include errno.h #include string.h #include sys/socket.h #include sys/types.h #include netinet/in.h #include arpa/inet.h #include sys/select.h #define SERV_PORT 8888 #define SERV_IP 127.0.0.1 //本地回环接口 #define LIST 20 //服务器最大接受连接 #define MAX_FD 10 //FD_SET支持描述符数量 int main(void) { int sockfd; int err; int i; int connfd; int fd_all[MAX_FD]; //保存所有描述符,用于select调用后,判断哪个可读 //下面两个备份原因是select调用后,会发生变化,再次调用select前,需要重新赋值 fd_set fd_read; //FD_SET数据备份 fd_set fd_select; //用于select struct timeval timeout; //超时时间备份 struct timeval timeout_select; //用于select struct sockaddr_in serv_addr; //服务器地址 struct sockaddr_in cli_addr; //客户端地址 socklen_t serv_len; socklen_t cli_len; //超时时间设置 timeout.tv_sec = 10; timeout.tv_usec = 0; sockfd = socket(AF_INET, SOCK_STREAM, 0); if(sockfd 0) { perror(fail to socket); exit(1); } memset(serv_addr, 0, sizeof(serv_addr)); memset(cli_addr, 0, sizeof(cli_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(SERV_PORT); serv_addr.sin_addr.s_addr = inet_addr(SERV_IP); serv_len = sizeof(serv_addr); err = bind(sockfd, (struct sockaddr *)serv_addr, serv_len); if(err 0) { perror(fail to bind); exit(1); } err = listen(sockfd, LIST); if(err 0) { perror(fail to listen); exit(1); } //初始化fd_all数组 memset(fd_all, -1,

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档