多客户模式
2012-07-10 15:45 Rollen Holt 阅读(486) 评论(0) 编辑 收藏 举报#include <sys/types.h> #include <sys/time.h> #include <stdio.h> #include <stdlib.h> #include <sys/ioctl.h> #include <fcntl.h> #include <unistd.h> #include <sys/socket.h> #include <netinet/in.h> int main(int argc, char const *argv[]) { int server_sockfd, client_sockfd; int server_len, client_len; struct sockaddr_in server_address; struct sockaddr_in client_address; int result; fd_set readfds,testfds; // create a socket for server and name it server_sockfd=socket(AF_INET,SOCK_STREAM,0); server_address.sin_family=AF_INET; server_address.sin_addr.s_addr=htonl(INADDR_ANY); server_address.sin_port=htons(9734); server_len=sizeof(server_address); //bind the socket and address bind(server_sockfd,(struct sockaddr*)&server_address,server_len); listen(server_sockfd,5); FD_ZERO(&readfds); FD_SET(server_sockfd,&readfds); while(1){ char ch; int fd; int nread; testfds=readfds; printf("server waiting...\n"); result=select(FD_SETSIZE,&testfds,(fd_set*)NULL,(fd_set*)NULL,(struct timeval*)0); if(result<1){ perror("server5..."); exit(1); } for(fd=0;fd<FD_SETSIZE;fd++){ if(FD_ISSET(fd,&testfds)){ if(fd==server_sockfd){ client_len=sizeof(client_address); client_sockfd=accept(server_sockfd,(struct sockaddr*)&client_address,&client_len); FD_SET(client_sockfd,&readfds); printf("adding client on fd %d\n", client_sockfd ); }else{ ioctl(fd,FIONREAD,&nread); if(nread==0){ close(fd); FD_CLR(fd,&readfds); printf("removing client on fd %d\n",fd ); }else{ read(fd,&ch,1); sleep(3); printf("server client on fd %d\n",fd ); ch++; write(fd,&ch,1); } } } } } return 0; }
==============================================================================
本博客已经废弃,不在维护。新博客地址:http://wenchao.ren
我喜欢程序员,他们单纯、固执、容易体会到成就感;面对压力,能够挑灯夜战不眠不休;面对困难,能够迎难而上挑战自我。他
们也会感到困惑与傍徨,但每个程序员的心中都有一个比尔盖茨或是乔布斯的梦想“用智慧开创属于自己的事业”。我想说的是,其
实我是一个程序员
==============================================================================
![](http://service.t.sina.com.cn/widget/qmd/1882500857/8c17d4b5/1.png)