当前位置:   article > 正文

TCP通信实现(服务器端和客户端)_在线tcp客户端

在线tcp客户端
  1. // TCP 通信的服务器端
  2. #include <stdio.h>
  3. #include <arpa/inet.h>
  4. #include <unistd.h>
  5. #include <string.h>
  6. #include <stdlib.h>
  7. int main() {
  8. // 1.创建socket(用于监听的套接字)
  9. int lfd = socket(AF_INET, SOCK_STREAM, 0);
  10. if(lfd == -1) {
  11. perror("socket");
  12. exit(-1);
  13. }
  14. // 2.绑定
  15. struct sockaddr_in saddr;
  16. saddr.sin_family = AF_INET;
  17. // inet_pton(AF_INET, "192.168.193.128", saddr.sin_addr.s_addr);
  18. saddr.sin_addr.s_addr = INADDR_ANY; // 0.0.0.0
  19. saddr.sin_port = htons(9999);
  20. int ret = bind(lfd, (struct sockaddr *)&saddr, sizeof(saddr));
  21. if(ret == -1) {
  22. perror("bind");
  23. exit(-1);
  24. }
  25. // 3.监听
  26. ret = listen(lfd, 8);
  27. if(ret == -1) {
  28. perror("listen");
  29. exit(-1);
  30. }
  31. // 4.接收客户端连接
  32. struct sockaddr_in clientaddr;
  33. int len = sizeof(clientaddr);
  34. int cfd = accept(lfd, (struct sockaddr *)&clientaddr, &len);
  35. if(cfd == -1) {
  36. perror("accept");
  37. exit(-1);
  38. }
  39. // 输出客户端的信息
  40. char clientIP[16];
  41. inet_ntop(AF_INET, &clientaddr.sin_addr.s_addr, clientIP, sizeof(clientIP));
  42. unsigned short clientPort = ntohs(clientaddr.sin_port);
  43. printf("client ip is %s, port is %d\n", clientIP, clientPort);
  44. // 5.通信
  45. char recvBuf[1024] = {0};
  46. while(1) {
  47. // 获取客户端的数据
  48. int num = read(cfd, recvBuf, sizeof(recvBuf));
  49. if(num == -1) {
  50. perror("read");
  51. exit(-1);
  52. } else if(num > 0) {
  53. printf("recv client data : %s\n", recvBuf);
  54. } else if(num == 0) {
  55. // 表示客户端断开连接
  56. printf("clinet closed...");
  57. break;
  58. }
  59. char * data = "hello,i am server";
  60. // 给客户端发送数据
  61. write(cfd, data, strlen(data));
  62. }
  63. // 关闭文件描述符
  64. close(cfd);
  65. close(lfd);
  66. return 0;
  67. }
  1. // TCP通信的客户端
  2. #include <stdio.h>
  3. #include <arpa/inet.h>
  4. #include <unistd.h>
  5. #include <string.h>
  6. #include <stdlib.h>
  7. int main() {
  8. // 1.创建套接字
  9. int fd = socket(AF_INET, SOCK_STREAM, 0);
  10. if(fd == -1) {
  11. perror("socket");
  12. exit(-1);
  13. }
  14. // 2.连接服务器端
  15. struct sockaddr_in serveraddr;
  16. serveraddr.sin_family = AF_INET;
  17. inet_pton(AF_INET, "192.168.193.128", &serveraddr.sin_addr.s_addr);
  18. serveraddr.sin_port = htons(9999);
  19. int ret = connect(fd, (struct sockaddr *)&serveraddr, sizeof(serveraddr));
  20. if(ret == -1) {
  21. perror("connect");
  22. exit(-1);
  23. }
  24. // 3. 通信
  25. char recvBuf[1024] = {0};
  26. while(1) {
  27. char * data = "hello,i am client";
  28. // 给客户端发送数据
  29. write(fd, data , strlen(data));
  30. sleep(1);
  31. int len = read(fd, recvBuf, sizeof(recvBuf));
  32. if(len == -1) {
  33. perror("read");
  34. exit(-1);
  35. } else if(len > 0) {
  36. printf("recv server data : %s\n", recvBuf);
  37. } else if(len == 0) {
  38. // 表示服务器端断开连接
  39. printf("server closed...");
  40. break;
  41. }
  42. }
  43. // 关闭连接
  44. close(fd);
  45. return 0;
  46. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/886271
推荐阅读
相关标签
  

闽ICP备14008679号