zoukankan      html  css  js  c++  java
  • 多客户模式

    #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;
    }
    

      

  • 相关阅读:
    庆祝 杀马下载量突破300万!
    智能实验室-杀马(Defendio) 4.26.0.940
    智能实验室-全能优化(Guardio) 4.992.0.900
    智能实验室-杀马(Defendio) 4.17.0.850
    目前为止功能最全的基于silverlight4(beta)的摄像头应用
    Discuz!NT负载均衡方案
    Discuz!NT跨站缓存同步
    Discuz!NT负载均衡解决方案(HA)之LVS(Linux Virtual Server)
    Discuz!NT企业版之Sphinx全文搜索(下)
    Discuz!NT千万级数据量上的两驾马车TokyoCabinet,MongoDB
  • 原文地址:https://www.cnblogs.com/rollenholt/p/2584778.html
Copyright © 2011-2022 走看看