UDP聊天实现(简单版)

两者代码基本一致

关于套接字:

甲方:

  1 #include <stdio.h>
  2 #include <string.h>
  3 #include <netinet/in.h>
  4 #include <stdlib.h>
  5 #include <sys/socket.h>
  6 #include <fcntl.h>
  7 
  8 int main()
  9 {
 10         int ret = 0;
 11         int fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
 12         if(fd < 0){
 13                 perror("socket");
 14                 exit(EXIT_FAILURE);
 15         }
 16         struct sockaddr_in gg;
 17         gg.sin_family = AF_INET;
 18         gg.sin_port = htons(9527);
 19         gg.sin_addr.s_addr = inet_addr("192.168.1.10");
 20         ret = bind(fd, (struct sockaddr *)&gg, 16);
 21         if(ret < 0){
 22                 perror("bind");
 23                 return 1;
 24         }
 25         unsigned char buff[1024] = {0};
 26         unsigned char data[1024] = {0};
 27         struct sockaddr_in mm;
 28         mm.sin_family = AF_INET;
 29         mm.sin_port = htons(9528);
 30         mm.sin_addr.s_addr = inet_addr("192.168.1.10");
 31         int mm_len = 0;
 32         while(1){
 33                 fd_set st;
 34                 FD_ZERO(&st);
 35                 FD_SET(fd, &st);
 36                 FD_SET(0, &st);
 37                 ret = select(fd+1, &st, 0, 0, 0);
 38                 if(ret < 0){
 39                         perror("select");
 40                         return 1;
 41                 }
 42                 if(FD_ISSET(fd, &st)){
 43                         memset(buff, 0, 1024);
 44                         ret = recvfrom(fd, buff, 1024, 0, (struct sockaddr *)&mm, &mm_len);
 45                         if(ret < 0){
 46                                 perror("recvfrom");
 47                                 exit(EXIT_FAILURE);
 48                         }
 49                         printf("gg said :%s", buff);
 50                 }
 51                 if(FD_ISSET(0, &st)){
 52                         memset(data, 0, 1024);
 53                         read(0, data, 1024);
 54                         ret = sendto(fd, data, strlen(data), 0, (struct sockaddr *)&mm, 16);
 55                          if(ret < 0){
 56                                 perror("sendto");
 57                                 exit(EXIT_FAILURE);
 58                         }
 59                 }
 60 
 61         }
 62         close(fd);
 63 }
View Code

乙方:

  1 #include <stdio.h>
  2 #include <string.h>
  3 #include <netinet/in.h>
  4 #include <stdlib.h>
  5 #include <sys/socket.h>
  6 #include <fcntl.h>
  7 
  8 int main()
  9 {
 10         int ret = 0;
 11         int fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
 12         if(fd < 0){
 13                 perror("socket");
 14                 exit(EXIT_FAILURE);
 15         }
 16         struct sockaddr_in mm;
 17         mm.sin_family = AF_INET;
 18         mm.sin_port = htons(9528);
 19         mm.sin_addr.s_addr = inet_addr("192.168.1.10");
 20         ret = bind(fd, (struct sockaddr *)&mm, 16);
 21         if(ret < 0){
 22                 perror("bind");
 23                 return 1;
 24         }
 25         unsigned char buff[1024] = {0};
 26         unsigned char data[1024] = {0};
 27         struct sockaddr_in gg;
 28         gg.sin_family = AF_INET;
 29         gg.sin_port = htons(9527);
 30         gg.sin_addr.s_addr = inet_addr("192.168.1.10");
 31         int gg_len = 0;
 32         while(1){
 33                 fd_set st;
 34                 FD_ZERO(&st);
 35                 FD_SET(fd, &st);
 36                 FD_SET(0, &st);
 37                 ret = select(fd+1, &st, 0, 0, 0);
 38                 if(ret < 0){
 39                         perror("select");
 40                         return 1;
 41                 }
 42                 if(FD_ISSET(fd, &st)){
 43                         memset(buff, 0, 1024);
 44                         ret = recvfrom(fd, buff, 1024, 0, (struct sockaddr *                                                                    )&gg, &gg_len);
 45                         if(ret < 0){
 46                                 perror("recvfrom");
 47                                 exit(EXIT_FAILURE);
 48                         }
 49                         printf("mm said :%s", buff);
 50                 }
 51                 if(FD_ISSET(0, &st)){
 52                         memset(data, 0, 1024);
 53                         read(0, data, 1024);
 54                         ret = sendto(fd, data, strlen(data), 0, (struct sockaddr *)&gg, 16);
 55                          if(ret < 0){
 56                                 perror("sendto");
 57                                 exit(EXIT_FAILURE);
 58                         }
 59                 }
 60         }
 61         close(fd);
 62 }
~        
View Code

转载于:https://www.cnblogs.com/luoxiang/p/4090322.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值