0基础学会 UDP通信(内附C语言源码)

0基础学会 UDP通信(内附C语言源码),第1张

#include             
#include 
ssize_t sendto(int socketfd,const void* buf,size_t len,int flags,const struct sockaddr *dest_addr,socklen_t addrlen);
    -参数:
        -sockfd:通信后的fd
        -buf:要发送的数据
        -len:发送数据的长度
        -flags:0
        -dest_addr:通信的另外一端的地址信息
        -addrlen:地址的内存大小
ssize_t recvfrom(int sockfd,void *buf,size_t len,int flags,struct sockaddr *src_addr,socklen_t *addrlen);
    -参数:
        -sockfd:通信的fd
        -buf:接收数据的数据
        -len:数据的大小
        -flags:0
        -src_addr:用来保存另外一端的地址信息,不需要可以指定为NULL
        -addrlen:地址的内存大小

相关的代码是实现为:

服务器端

  1 #include 
  2 #include 
  3 #include 
  4 #include 
  5 #include 
  6 int main()
  7 {
  8         //1、创建一个socket
  9         int fd=socket(AF_INET,SOCK_DGRAM,0);
 10         if(fd==-1)
 11         {
 12                 perror("socket");
 13                 exit(-1);
 14         }
 15         //2、绑定
 16         struct sockaddr_in saddr;
 17         saddr.sin_family=AF_INET;
 18         saddr.sin_port=htons(9999);
 19         saddr.sin_addr.s_addr=INADDR_ANY;
 20         int ret=bind(fd,(struct sockaddr*)&saddr,sizeof(saddr));
 21         if(ret==-1)
 22         {
 23                 perror("bind");
 24                 exit(-1);
 25         }
 26         //3、通信
 27         while(1)
 28         {
 29                 char recvbuf[128];
 30                 char ipbuf[16];
 31                 struct sockaddr_in cliaddr;
 32                 int len=sizeof(cliaddr);
 33                 //接收数据
 34                 int num=recvfrom(fd,recvbuf,sizeof(recvbuf),0,(struct sockaddr*)&cliaddr,&len);
 35                 if(num==-1)
 36                 {
 37                         perror("recvfrom");
 38                         exit(-1);
 39                 }
 40                 printf("client IP:%s,Port:%d\n",inet_ntop(AF_INET,&cliaddr.sin_addr.s_addr,ipbuf,sizeof(ipbuf)),ntohs(cliaddr.sin_port));
 41 
 42                 printf("client say:%s\n",recvbuf);
 43                 //发送数据
 44                 sendto(fd,recvbuf,strlen(recvbuf)+1,0,(struct sockaddr*)&cliaddr,sizeof(cliaddr));
 45         }
 46         close(fd);
 47         return 0;
 48 }

客户端

  1 #include 
  2 #include 
  3 #include 
  4 #include 
  5 #include 
  6 int main()
  7 {
  8         //1、socket
  9         int fd=socket(AF_INET,SOCK_DGRAM,0);
 10         //2、通信
 11         struct sockaddr_in saddr;
 12         saddr.sin_family=AF_INET;
 13         saddr.sin_port=htons(9999);
 14         inet_pton(AF_INET,"192.168.17.134",&saddr.sin_addr.s_addr);
 15         int num=0;
 16         while(1)
 17         {
 18                 char sendbuf[128];
 19                 sprintf(sendbuf,"hello,i am shirui %d\n",num++);
 20                 struct sockaddr_in cliaddr;
 21                 int len=sizeof(cliaddr);
 22                 //2、发送数据
 23                 sendto(fd,&sendbuf,strlen(sendbuf)+1,0,(struct sockaddr*)&saddr,sizeof(saddr));
 24                 //3、接收数据
 25                 recvfrom(fd,&sendbuf,sizeof(sendbuf),0,NULL,NULL);
 26                 printf("server say:%s\n",sendbuf);
 27                 sleep(1);
 28         }
 29         close(fd);
 30         return 0;
 31 }
 32 

 

  

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/787567.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-05
下一篇 2022-05-05

发表评论

登录后才能评论

评论列表(0条)

保存