#include #include #include #include #include #include #include #include #include #include #include #include int server(){int iSockfd = socket(PF_INET,SOCK_STREAM,0); /*1. 准备socket*/if(iSockfd == -1){ perror("socket:"); return 0;}/*2. 准备地址*/struct sockaddr_in addr;addr.sin_family = PF_INET;addr.sin_port = htons(17777);inet_aton("127.0.0.1",&addr.sin_addr);int flag=1,len=sizeof(int);//解决端口TIME_WAIT状态,无法连接if( setsockopt(iSockfd, SOL_SOCKET, SO_REUSEADDR, &flag, len) == -1){ return -1;}int iRes = bind(iSockfd, (struct sockaddr*)&addr, sizeof(addr)); /*3.绑定*/if(iRes == -1){ perror("Bind 失败:"); return -1;}iRes = listen(iSockfd, 100); /*4.监听*/if(iRes == -1){ perror("监听失败:"); return -1;}int infds;while(1){ /*5.等待客户端连接*/ struct sockaddr_in fromaddr; socklen_t len = sizeof(fromaddr); /*6.和客户端通信*/ /*6.1接收客户端数据*/ char buf[100] = {0}; struct timeval timeout; timeout.tv_sec = 2; timeout.tv_usec = 0; fd_set Readyfd; FD_ZERO(&Readyfd); FD_SET(iSockfd, &Readyfd); infds = select(iSockfd+1, &Readyfd, NULL, NULL, &timeout); if(infds>0) { if(FD_ISSET(iSockfd, &Readyfd)) { int fd = accept(iSockfd, (struct sockaddr*)&fromaddr,(socklen_t *)&len); if(-1 == fd) { /*告警信息 不影响下一个资源申请 所以一直是监听状态*/ continue; } if(read(fd, buf, 100)<=0) { printf("-----Error\n"); close(fd); continue; } else { printf("------buf=%s\n",buf); //sleep(5);//write(fd,(char *) "Server send date", 100); sleep(5); if(write(fd,(char *) "Server send date", 100)<=0) { close(fd); continue; } } } } else if(infds < 0) { perror("错误"); break; } else {printf("超时处理\n");//write(iSockfd+1,(char *) "---Server--- Send", 100); continue; } } close(iSockfd);return 0;}int main(){server();return 0;}