打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
14、socket编程实现回声客户端

所谓“回声”,是指客户端向服务器发送一条数据,服务器再将数据原样返回给客户端,就像声音一样,遇到障碍物会被“反弹回来”。
对!客户端也可以使用 write() / send() 函数向服务器发送数据,服务器也可以使用 read() / recv() 函数接收数据。

服务端代码 server.c:

  1. #include <stdio.h>
  2. /* For socket functions*/
  3. #include <sys/socket.h>
  4. #include <netinet/in.h>
  5. #include <errno.h>
  6. int main(int c, char ** v)
  7. {
  8. /* 创建Socket */
  9. int serverSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  10. if (serverSock < 0)
  11. {
  12. printf("socket error\n");
  13. return 1;
  14. }
  15. /* 绑定Socket */
  16. struct sockaddr_in addr = {0};
  17. addr.sin_family = AF_INET;
  18. /* 绑定IP地址为0,即绑定所有网卡 */
  19. //addr.sin_addr.s_addr = inet_addr("100.95.139.78");
  20. addr.sin_port = htons(8093);
  21. if (0 != bind(serverSock, (struct sockaddr*)&addr, sizeof(addr)))
  22. {
  23. printf("bind error errno = %d.\n", errno);
  24. return 1;
  25. }
  26. /* 启动监听 */
  27. if (0 != listen(serverSock, 20))
  28. {
  29. printf("listen error\n");
  30. return 1;
  31. }
  32. /* 等待客户端连接 */
  33. struct sockaddr_in clientAddr;
  34. socklen_t addrLen = sizeof(clientAddr);
  35. int clientSock = accept(serverSock, (struct sockaddr *)&clientAddr, &addrLen);
  36. /* 接收数据 */
  37. char buf[512] = {0};
  38. int len = recv(clientSock, buf, 512, 0);
  39. /* 发送数据 */
  40. send(clientSock ,buf, len, 0);
  41. /* 使用read/write函数进行Socket套接字读写 */
  42. //int len = read(clientSock, buf, 512);
  43. //write(clientSock, buf, len);
  44. /* 关闭Socket */
  45. close(clientSock);
  46. close(serverSock);
  47. return 0;
  48. }

客户端代码 client.c

  1. #include <stdio.h>
  2. #include <sys/socket.h>
  3. #include <netinet/in.h>
  4. #include <errno.h>
  5. int main(int c, char ** v)
  6. {
  7. /* 创建Socket */
  8. int sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  9. if (sock <= 0)
  10. {
  11. printf("socket error errno = %d.\n", errno);
  12. }
  13. /* 连接服务端 */
  14. struct sockaddr_in addr = {0};
  15. addr.sin_family = AF_INET;
  16. addr.sin_port = htons(8093);
  17. addr.sin_addr.s_addr = inet_addr("127.0.0.1");
  18. connect(sock, (struct sockaddr*)&addr, sizeof(addr));
  19. char buf[] = "My Name is Weiyyi, I am 2 months old.";
  20. send(sock, buf, sizeof(buf), 0);
  21. char recvBuf[128] = {0};
  22. recv(sock, recvBuf, 128, 0);
  23. close(sock);
  24. return 0;
  25. }

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C语言、嵌入式应用:TCP通信实例分析
漫画C语言 做个聊天软件你不懂也得懂
Linux网络编程一步一步学-UDP方式点对点通讯
socket网络编程快速上手(二)——细节问题(5)(完结篇)
Linux环境下的Socket编程 - C&C - Linux技术中坚站
网络编程2
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服