博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于UDP的IO多路复用一例
阅读量:6941 次
发布时间:2019-06-27

本文共 3062 字,大约阅读时间需要 10 分钟。

 

服务器端:

1:  #include 
2:  #include 
3:  #include 
4:  #include 
5:  #include 
6:  #include 
7:  #include 
8:  #include 
9:  #include 
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 
2:  #include 
3:  #include 
4:  #include 
5:  #include 
6:  #include 
7:  #include 
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:  }

运行:

转载地址:http://xennl.baihongyu.com/

你可能感兴趣的文章
Binary Search--二分查找
查看>>
《计算机图形学》2.1.6 三维观察设备 学习笔记
查看>>
QT在线
查看>>
以P2P网贷为例互联网金融产品如何利用大数据做风控?
查看>>
Polymer初探
查看>>
zprofiler三板斧解决cpu占用率过高问题(转载)
查看>>
深入浅出NIO Socket实现机制
查看>>
bzoj 1930: [Shoi2003]pacman 吃豆豆 [费用流]
查看>>
(数字IC)低功耗设计入门(三)——系统与架构级低功耗设计
查看>>
Dynamics CRM2016 新功能之从CRM APP中导出数据至EXCEL
查看>>
Android——推断Service是否已经启动
查看>>
subprocess模块
查看>>
大数据入门基础系列之初步认识大数据生态系统圈(博主推荐)
查看>>
linux下命令行的查找顺序
查看>>
基于HTML5 Canvas 点击添加 2D 3D 机柜模型
查看>>
详述 SQL 中的 distinct 和 row_number() over() 的区别及用法
查看>>
xshell 登陆堡垒机实现自动跳转
查看>>
Hexo-设置阅读全文
查看>>
实模式与保护模式
查看>>
分布式ID生成器解决方案
查看>>