upd通信代码-linux版本

来源:互联网 发布:内地搞笑网络剧排行榜 编辑:程序博客网 时间:2024/06/15 08:49

1.服务端代码

[cpp] view plaincopyprint?
  1. #include <sys/types.h>          /* See NOTES */  
  2. #include <sys/socket.h>   
  3. #include <arpa/inet.h>   
  4. #include <stdio.h>   
  5. #include <stdlib.h>   
  6. #include <strings.h>   
  7. #include <string.h>   
  8. #include <errno.h>   
  9.          
  10. #define SERV_PORT 8000   
  11. #define MAXLINE 1024   
  12. #define SA struct sockaddr   
  13.   
  14. void dg_echo(int sockfd, SA* pcliaddr, socklen_t clilen);  
  15.   
  16. int main(int argc, char* argv[])  
  17. {  
  18.     int sockfd, ret;  
  19.     struct sockaddr_in servaddr, cliaddr;  
  20.     sockfd = socket(AF_INET, SOCK_DGRAM, 0);  
  21.     if (sockfd < 0)  
  22.     {  
  23.         printf("socket error, %d:%s\n", errno, strerror(errno));  
  24.         return -1;  
  25.     }  
  26.     bzero(&servaddr, sizeof(servaddr));  
  27.       
  28.     servaddr.sin_family = AF_INET;  
  29.     servaddr.sin_addr.s_addr = htonl(INADDR_ANY);  
  30.     servaddr.sin_port = htons(SERV_PORT);  
  31.       
  32.     ret = bind(sockfd, (SA*)&servaddr, sizeof(servaddr));  
  33.     if (ret < 0)  
  34.     {  
  35.         printf("bind error, %d:%s\n", errno, strerror(errno));  
  36.         return -1;  
  37.     }  
  38.     dg_echo(sockfd, (SA*)&cliaddr, sizeof(cliaddr));  
  39.       
  40.     return 0;  
  41. }  
  42.   
  43. void dg_echo(int sockfd, SA* pcliaddr, socklen_t clilen)  
  44. {  
  45.     int n;  
  46.     socklen_t len;  
  47.     char mesg[MAXLINE];  
  48.       
  49.     for (;;)  
  50.     {  
  51.         len = clilen;  
  52.         n = recvfrom(sockfd, mesg, MAXLINE, 0, pcliaddr, &len);  
  53.         sendto(sockfd, mesg, n, 0, pcliaddr, len);  
  54.     }  
  55. }  

2.客户端代码

[cpp] view plaincopyprint?
  1. #include <sys/types.h>          /* See NOTES */  
  2. #include <sys/socket.h>   
  3. #include <arpa/inet.h>   
  4. #include <stdio.h>   
  5. #include <stdlib.h>   
  6. #include <strings.h>   
  7. #include <string.h>   
  8.          
  9. #define SERV_PORT 8000   
  10. #define MAXLINE 1024   
  11. #define SA struct sockaddr  
  12.   
  13. void dg_echo(FILE*fp, int sockfd, const SA* pservaddr, socklen_t servlen);  
  14.   
  15. int main(int argc, char* argv[])  
  16. {  
  17.     int sockfd;  
  18.     struct sockaddr_in servaddr;  
  19.     bzero(&servaddr, sizeof(servaddr));  
  20.     servaddr.sin_family = AF_INET;  
  21.     servaddr.sin_port = htons(SERV_PORT);  
  22.     inet_pton(AF_INET, "127.0.0.1", &servaddr.sin_addr);  
  23.       
  24.     sockfd = socket(AF_INET, SOCK_DGRAM, 0);  
  25.     if (sockfd < 0)  
  26.     {  
  27.         printf("socket error, %d:%s\n", errno, strerror(errno));  
  28.         return -1;  
  29.     }  
  30.   
  31.     dg_echo(stdin, sockfd, (SA*)&servaddr, sizeof(servaddr));  
  32.       
  33.     return 0;  
  34. }  
  35.   
  36. void dg_echo(FILE* fp, int sockfd, const SA* pservaddr, socklen_t servlen)  
  37. {  
  38.     int n;  
  39.     char sendline[MAXLINE], recvline[MAXLINE + 1];  
  40.     while(fgets(sendline, MAXLINE, fp) != NULL)  
  41.     {  
  42.         sendto(sockfd, sendline, strlen(sendline), 0, pservaddr, servlen);  
  43.         n = recvfrom(sockfd, recvline, MAXLINE, 0, NULL, NULL);  
  44.         recvline[n] = 0;  
  45.         fputs(recvline, stdout);  
  46.     }  
  47. }  


原创粉丝点击