• 基于UDP的IO多路复用一例


    服务器端:

       1:  #include <stdio.h>
       2:  #include <stdlib.h>
       3:  #include <sys/socket.h>
       4:  #include <netinet/in.h>
       5:  #include <arpa/inet.h>
       6:  #include <string.h>
       7:  #include <sys/time.h>
       8:  #include <sys/types.h>
       9:  #include <unistd.h>
      10:   
      11:  typedef struct sockaddr SA;
      12:  #define N 256
      13:   
      14:  int main(int argc, char *argv[])
      15:  {
      16:      int sockfd;
      17:      char buffer[N];    
      18:      char buffer2[N];    
      19:      struct sockaddr_in myaddr, peeraddr;
      20:      socklen_t peerlen = sizeof(peeraddr);
      21:      int maxfd;
      22:      int i;
      23:   
      24:      fd_set rdfs;
      25:   
      26:      if((sockfd = socket(PF_INET, SOCK_DGRAM, 0)) < 0)
      27:      {
      28:          perror("fail to socket");
      29:          exit(-1);
      30:      }
      31:   
      32:      bzero(&myaddr, sizeof(myaddr));
      33:      myaddr.sin_family = PF_INET;
      34:      myaddr.sin_port = htons(atoi(argv[2]));
      35:      myaddr.sin_addr.s_addr = inet_addr(argv[1]); 
      36:   
      37:      if(bind(sockfd, (SA *)&myaddr, sizeof(myaddr)) < 0)
      38:      {
      39:          perror("fail to bind");
      40:          exit(-1);
      41:      }
      42:   
      43:      bzero(&peeraddr, peerlen);
      44:      maxfd = sockfd;
      45:   
      46:   
      47:      while(1)
      48:      {
      49:          FD_ZERO(&rdfs);
      50:          FD_SET(0, &rdfs);
      51:          FD_SET(sockfd, &rdfs);
      52:   
      53:          select(maxfd+1, &rdfs, NULL, NULL, NULL);
      54:   
      55:          for(i=0; i<=maxfd; i++)
      56:          {
      57:              if(FD_ISSET(i, &rdfs) == 1)
      58:              {
      59:                  if(i == 0)
      60:                  {
      61:                      fgets(buffer2, N, stdin);
      62:                      printf("you input %s", buffer2);
      63:                  }
      64:                  if(i == sockfd)
      65:                  {
      66:                      recvfrom(sockfd, buffer, N, 0, (SA *)&peeraddr, &peerlen);
      67:                      sendto(sockfd, buffer, N, 0, (SA *)&peeraddr, peerlen);
      68:                  }
      69:              }
      70:          }
      71:   
      72:      }
      73:   
      74:      return 0;
      75:  }

    客户端:

       1:  #include <unistd.h>
       2:  #include <stdio.h>
       3:  #include <stdlib.h>
       4:  #include <sys/socket.h>
       5:  #include <netinet/in.h>
       6:  #include <arpa/inet.h>
       7:  #include <string.h>
       8:   
       9:  typedef struct sockaddr SA;
      10:  #define N 256
      11:   
      12:  int main(int argc, char *argv[])
      13:  {
      14:      int sockfd;
      15:      char buffer[N];    
      16:      struct sockaddr_in serveraddr;
      17:   
      18:      if((sockfd = socket(PF_INET, SOCK_DGRAM, 0)) < 0)
      19:      {
      20:          perror("fail to socket");
      21:          exit(-1);
      22:      }
      23:   
      24:      bzero(&serveraddr, sizeof(serveraddr));
      25:      serveraddr.sin_family = PF_INET;
      26:      serveraddr.sin_port = htons(atoi(argv[2]));
      27:      serveraddr.sin_addr.s_addr = inet_addr(argv[1]); 
      28:   
      29:      while(1)
      30:      {
      31:          fgets(buffer, N, stdin);
      32:          if(strncmp(buffer, "quit", 4) == 0)
      33:          {
      34:              break;
      35:          }
      36:          sendto(sockfd, buffer, N, 0, (SA *)&serveraddr, sizeof(serveraddr));
      37:          bzero(buffer, N);
      38:          recvfrom(sockfd, buffer, N, 0, NULL, NULL);
      39:          printf("receive from server > %s",buffer); 
      40:      }
      41:      close(sockfd);
      42:      return 0;
      43:  }

    运行:

    image

  • 相关阅读:
    选择主要的构建实践方法(转) Tech
    201671010109 201620172《java程序设计》第一周感想
    201671010109 201720162第二周学习感想
    2016710101090 20162017《java程序设计》第三周感想
    sort k 详解
    java.util.NoSuchElementException: None.get的解决方法
    Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace 解决方法
    Java学习随笔之1: Java 语言概述和开发环境
    java 学习随笔之2:理解面向对象
    Selenium Basic Knowledge
  • 原文地址:https://www.cnblogs.com/pengdonglin137/p/2962100.html
Copyright © 2020-2023  润新知