用套接字实现UDP通信

  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. #include <string.h>  
  4. #include <sys/socket.h>  
  5. #include <netinet/in.h>  
  6.   
  7. #define N 100  
  8.   
  9. int main()  
  10. {  
  11.     int sockfd;  
  12.     struct sockaddr_in servaddr;  
  13.     struct sockaddr_in cliaddr;  
  14.     socklen_t clilen;  
  15.     char msg[N];  
  16.     int ret;  
  17.     int i;  
  18.     int n;  
  19.     int opt = 1;  
  20.   
  21.   
  22.     sockfd = socket(AF_INET,SOCK_DGRAM,0);  
  23.     if(sockfd == -1)  
  24.     {  
  25.         printf("socket errpor!\n");  
  26.         exit(-1);  
  27.     }  
  28.   
  29.     ret = setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));  
  30.     if(ret == -1)  
  31.     {  
  32.         printf("setsockopt error!\n");  
  33.         exit(-1);  
  34.     }  
  35.   
  36.     bzero(&servaddr,sizeof(servaddr));  
  37.     servaddr.sin_family = AF_INET;  
  38.     servaddr.sin_addr.s_addr = htonl(INADDR_ANY);  
  39.     servaddr.sin_port = htons(8000);  
  40.   
  41.     ret = bind(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr));  
  42.     if(ret == -1)  
  43.     {  
  44.         printf("bind error!\n");  
  45.         exit(-1);  
  46.     }  
  47.   
  48.     clilen = sizeof(cliaddr);  
  49.   
  50.     while(1)  
  51.     {  
  52.         n = recvfrom(sockfd,msg,N,0,(struct sockaddr*)&cliaddr,&clilen);  
  53.         if(n == 0)  
  54.         {  
  55.             printf("client is closed!\n");  
  56.             break;  
  57.         }  
  58.         msg[n] = '\0';  
  59.         printf("recv:%s",msg);  
  60.         for(i = 0; i < n; i++)  
  61.         {  
  62.             if(msg[i] >= 'a' && msg[i] <= 'z')  
  63.             {  
  64.                 msg[i] -= 32;  
  65.             }  
  66.         }         
  67.         printf("send:%s",msg);  
  68.         sendto(sockfd,msg,n,0,(struct sockaddr*)&cliaddr,sizeof(cliaddr));  
  69.     }  
  70.   
  71.     close(sockfd);  
  72.   
  73.     return 0;  
  74. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值