• 多客户模式


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

      

  • 相关阅读:
    fastjson反序列化
    BaseBean构造
    easyUI_rowdata
    SVN提交报错
    jsp页面数据保留两位小数
    数据库 建立
    增删改查问
    解决plsql中文乱码问题
    oracle_解锁表
    ibatis_compareValue
  • 原文地址:https://www.cnblogs.com/rollenholt/p/2584778.html
Copyright © 2020-2023  润新知