【UNIX】网络编程/多路复用IO服务器编码

服务器端:

#include
   
   
    
    
#include
    
    
     
     
#include
     
     
      
      
#include
      
      
       
       
#include
       
       
         #include 
        
          #include 
         
           #include 
          
            #define MAXLEN 100 typedef struct sockaddr SA; int main () { int nr; int listenfd,connfd,maxfd,i,nbyte; char buf[MAXLEN]; struct sockaddr_in servaddr,cliaddr; socklen_t clilen; fd_set global_rdfs,current_rdfs; if ((listenfd = socket(AF_INET,SOCK_STREAM,0)) < 0){ perror("socket"); exit(-1); } bzero(&servaddr,sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = INADDR_ANY; servaddr.sin_port = htons(8888); if (bind(listenfd,(SA*)&servaddr,sizeof(servaddr)) < 0){ perror("bind"); exit(-1); } listen(listenfd,5); FD_ZERO(&global_rdfs); FD_SET(listenfd,&global_rdfs); maxfd = listenfd; while(1){ current_rdfs = global_rdfs; if (select(maxfd+1,&current_rdfs,NULL,NULL,0)<0){ perror("select"); exit(-1); }else { for(i = 0;i<= maxfd;i++){ if (FD_ISSET(i,&current_rdfs)){ if(i == listenfd){ connfd = accept(listenfd,NULL,NULL); FD_SET(connfd,&global_rdfs); maxfd = maxfd>connfd?maxfd:connfd; }else{ if ((nbyte = recv(i,buf,sizeof(buf),0)) < 0){ close(i); FD_CLR(i,&global_rdfs); }else{ send(i,buf,sizeof(buf),0); } } } } } } return 0; } # 
           
          
         
       
      
      
     
     
    
    
   
   

客户端

#include
   
   
    
    
#include
    
    
     
     
#include
     
     
      
      
#include
      
      
       
       
#include
       
       
         #include 
        
          #include 
         
           #include 
          
            #define MAXLEN 100 typedef struct sockaddr SA; int main (int argc,char *argv[]) { int sockfd,nbyte; socklen_t clilen; struct sockaddr_in servaddr,cliaddr; char buf[MAXLEN]; if((sockfd = socket(AF_INET,SOCK_STREAM,0)) <0){ perror("sockfd"); exit(-1); } memset(&servaddr,0x00,sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = INADDR_ANY; servaddr.sin_port = htons(8888); if (connect(sockfd,(SA*)&servaddr,sizeof(servaddr))< 0){ perror("conncet"); exit(-1); } do { fgets(buf,MAXLEN,stdin); write(sockfd,buf,MAXLEN); memset(buf,0,sizeof(buf)); read(sockfd,buf,MAXLEN); printf("this is client recv read :%s\n",buf); }while(strncmp(buf,"quit",4) != 0); close(sockfd); return 0; } 
           
          
         
       
      
      
     
     
    
    
   
   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值