; 18 19 int main(int argc,char *argv[]) 20 { 21 int sockfd; 22 struct sockaddr_in servaddr; 23 sockfd = socket(AF_INET,SOCK_STREAM,0); 24 bzero(&servaddr,sizeof(servaddr)); 25 servaddr.sin_family = AF_INET; 26 servaddr.sin_port = htons(SERV_PORT); 27 inet_pton(AF_INET,IPADDRESS,&servaddr.sin_addr); 28 connect(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr)); 29 //处理连接描述符 30 handle_connection(sockfd); 31 return 0; 32 } 33 34 static void handle_connection(int sockfd) 35 { 36 char sendline[MAXLINE],recvline[MAXLINE]; 37 int maxfdp,stdineof; 38 fd_set rset; 39 int n; 40 FD_ZERO(&rset); 41 for (; ;) 42 { 43 //添加标准输入描述符 44 FD_SET(STDIN_FILENO,&rset); 45 //添加连接描述符 46 FD_SET(sockfd,&rset); 47 maxfdp = max(STDIN_FILENO,sockfd); 48 //进行轮询 49 select(maxfdp+1,&rset,NULL,NULL,NULL); 50 //测试连接套接字是否准备好 51 if (FD_ISSET(sockfd,&rset)) 52 { 53 n = read(sockfd,recvline,MAXLINE); 54 if (n == 0) 55 { 56 fprintf(stderr,"client: server is closed.\n"); 57 close(sockfd); 58 FD_CLR(sockfd,&rset); 59 } 60 write(STDOUT_FILENO,recvline,n); 61 } 62 //测试标准输入是否准备好 63 if (FD_ISSET(STDIN_FILENO,&rset)) 64 { 65 n = read(STDIN_FILENO,sendline,MAXLINE); 66 if (n == 0) 67 { 68 FD_CLR(STDIN_FILENO,&rset); 69 continue; 70 } 71 write(sockfd,sendline,n); 72 } 73 } 74 }
4、程序结果
启动服务程序,执行两个客户程序进行测试,结果如下图所示:



|