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

      

  • 相关阅读:
    Stm32CubeMX5 配置 STM32的串口DMA接受方式 --- 基于 stm32f051k8u6
    Stm32 控制1.44寸液晶显示图片 基于stm32f051k8u6
    makefile自动编译
    Stm32CubeMX5 创建LED控制工程
    ARM 汇编与C之间 的调用
    shell 脚本文件类型.sh ,变量
    bzoj3589 动态树 求链并 容斥
    bzoj2287【POJ Challenge】消失之物 缺一01背包
    bzoj2916: [Poi1997]Monochromatic Triangles 思路
    [NOI2010]超级钢琴 主席树
  • 原文地址:https://www.cnblogs.com/rollenholt/p/2584778.html
Copyright © 2011-2022 走看看