服务器之家

服务器之家 > 正文

Linux UDP服务端和客户端程序的实现

时间:2021-09-06 11:03     来源/作者:Mculover666

1. 源码

UDP服务端:

  1. /**
  2. * @brief UDP服务端
  3. * @author Mculover666
  4. * @date 2020/04/15
  5. */
  6. #include <stdio.h>
  7. #include <unistd.h>
  8. #include <sys/types.h>
  9. #include <sys/socket.h>
  10. #include <netinet/in.h>
  11. #include <arpa/inet.h>
  12. #include <stdlib.h>
  13. #include <string.h>
  14.  
  15. int main(int argc, char* argv[])
  16. {
  17.  
  18. int server_sock_fd;
  19. struct sockaddr_in server_addr, client_addr;
  20. char recv_buf[100];
  21. int nbytes = 0;
  22. socklen_t len = 0;
  23.  
  24. /* 创建Server Socket */
  25. server_sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
  26. if (server_sock_fd < 0)
  27. {
  28. printf("服务端Socket创建失败");
  29. return -1;
  30. }
  31. printf("服务端Socket创建成功\n");
  32.  
  33. /* 绑定ip和端口 */
  34. bzero(&server_addr, sizeof(server_addr));
  35. server_addr.sin_family = AF_INET;
  36. server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
  37. server_addr.sin_port = htons(atoi(argv[1]));//指定端口号
  38. bind(server_sock_fd, (struct sockaddr *) &server_addr, sizeof(server_addr));
  39.  
  40. printf("服务端Socket绑定成功\n");
  41.  
  42. while(1)
  43. {
  44. /* 接收UDP客户端的数据 */
  45. printf("等待接收客户端数据:\n");
  46. len = sizeof(client_addr);
  47. nbytes = recvfrom(server_sock_fd, recv_buf, 100, 0, (struct sockaddr *)&client_addr, &len);
  48. printf("ok\n");
  49. recv_buf[nbytes] = '\0';
  50. printf("recv %d bytes:%s.\n", nbytes, recv_buf);
  51.  
  52. //接收用户输入,发送给客户端
  53. printf("请输入要发送给客户端的数据:");
  54. fgets(recv_buf, 100, stdin);
  55. sendto(server_sock_fd,recv_buf,strlen(recv_buf),0,(struct sockaddr *)&client_addr,len);
  56. }
  57.  
  58. return 0;
  59. }

UDP客户端:

  1. /**
  2. * @brief UDP客户端程序
  3. * @author Mculover666
  4. * @date 2020/04/15
  5. */
  6. #include <stdio.h>
  7. #include <unistd.h>
  8. #include <sys/types.h>
  9. #include <sys/socket.h>
  10. #include <netinet/in.h>
  11. #include <arpa/inet.h>
  12. #include <stdlib.h>
  13. #include <string.h>
  14.  
  15. int main(int argc, char* argv[])
  16. {
  17. int sock_fd;
  18. struct sockaddr_in server_addr;
  19. char recv_buf[100];
  20. int nbytes = 0;
  21. socklen_t len = 0;
  22.  
  23. /* 创建Socket */
  24. sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
  25. if (sock_fd < 0)
  26. {
  27. printf("客户端Socket创建失败");
  28. return -1;
  29. }
  30.  
  31. /* 绑定ip和端口 */
  32. bzero(&server_addr, sizeof(server_addr));
  33. server_addr.sin_family = AF_INET;
  34. server_addr.sin_addr.s_addr = inet_addr(argv[1]);
  35. server_addr.sin_port = htons(atoi(argv[2]));//指定端口号
  36. while(1)
  37. {
  38. len = sizeof(server_addr);
  39. //接收用户输入,发送给服务端
  40. printf("请输入要发送给服务端的数据:");
  41. fgets(recv_buf, 100, stdin);
  42. sendto(sock_fd,recv_buf,100,0,(struct sockaddr *)(&server_addr),len);
  43.  
  44. /* 接收UDP客户端的数据 */
  45. len = sizeof(server_addr);
  46. nbytes = recvfrom(sock_fd, recv_buf, 100, 0, (struct sockaddr *)&server_addr, &len);
  47. recv_buf[nbytes] = '\0';
  48. printf("recv %d bytes:%s.\n", nbytes, recv_buf);
  49.  
  50. }
  51.  
  52. return 0;
  53. }

2. 在本机运行结果

编译:

  1. gcc server.c -o srever_wangshiwei.o
  2. gcc client.c -o client_wangshiwei.o

运行:

Linux UDP服务端和客户端程序的实现

Linux UDP服务端和客户端程序的实现

3. 在开发板与PC之间运行结果

编译:

  1. gcc server.c -o srever_wangshiwei.o
  2. arm-linux-gnueabi-gcc client.c -o clientARM_wangshiwei.o

Linux UDP服务端和客户端程序的实现

Linux UDP服务端和客户端程序的实现

到此这篇关于Linux UDP服务端和客户端程序的实现的文章就介绍到这了,更多相关Linux UDP服务端和客户端内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/Mculover666/article/details/105614202

相关文章

热门资讯

yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
2021年耽改剧名单 2021要播出的59部耽改剧列表
2021年耽改剧名单 2021要播出的59部耽改剧列表 2021-03-05
返回顶部