该代码的返回值是0,表示程序正常运行结束。

每行的意思如下:

  1. #include <stdio.h>:包含标准输入输出库的头文件。
  2. #include <unistd.h>:包含系统调用库的头文件。
  3. #include <stdlib.h>:包含标准库的头文件。
  4. #include <sys/types.h>:包含系统类型定义的头文件。
  5. #include <sys/stat.h>:包含系统状态定义的头文件。
  6. #include <string.h>:包含字符串处理函数的头文件。
  7. #include <arpa/inet.h>:包含互联网地址族定义的头文件。
  8. #include <ctype.h>:包含字符处理函数的头文件。
  9. int main(int argc, const char* argv[]):主函数,程序的入口。
  10. int lfd = socket(AF_INET, SOCK_STREAM, 0);:创建监听的套接字。
  11. if(lfd == -1):如果套接字创建失败。
  12. perror("socket error");:打印错误信息。
  13. exit(1);:退出程序。
  14. struct sockaddr_in server;:定义服务器地址结构体。
  15. memset(&server, 0, sizeof(server));:将服务器地址结构体清零。
  16. server.sin_family = AF_INET;:设置地址族协议为IPv4。
  17. server.sin_port = htons(8888);:设置端口号为8888。
  18. server.sin_addr.s_addr = htonl(INADDR_ANY);:设置IP地址为任意可用地址。
  19. int ret = bind(lfd, (struct sockaddr*)&server, sizeof(server));:将套接字和本地的IP port绑定。
  20. if(ret == -1):如果绑定失败。
  21. perror("bind error");:打印错误信息。
  22. exit(1);:退出程序。
  23. ret = listen(lfd, 20);:设置套接字为监听状态,最大连接数为20。
  24. if(ret == -1):如果监听失败。
  25. perror("listen error");:打印错误信息。
  26. exit(1);:退出程序。
  27. struct sockaddr_in client;:定义客户端地址结构体。
  28. socklen_t len = sizeof(client);:获取客户端地址结构体的长度。
  29. int cfd = accept(lfd, (struct sockaddr*)&client, &len);:等待并接受客户端连接请求。
  30. if(cfd == -1):如果接受连接失败。
  31. perror("accept error");:打印错误信息。
  32. exit(1);:退出程序。
  33. printf(" accept successful !!!\n");:打印连接成功的提示信息。
  34. while(1):循环进行通信。
  35. char buf[1024] = {0};:定义接收缓冲区。
  36. int len = read(cfd, buf, sizeof(buf));:从客户端接收数据。
  37. if(len == -1):如果接收失败。
  38. perror("read error");:打印错误信息。
  39. exit(1);:退出程序。
  40. else if(len == 0):如果客户端断开连接。
  41. printf(" 客户端已经断开了连接 \n");:打印客户端断开连接的提示信息。
  42. close(cfd);:关闭客户端套接字。
  43. break;:跳出循环。
  44. printf("recv buf: %s\n", buf);:打印接收到的数据。
  45. for(int i=0; i<len; ++i):遍历接收到的数据。
  46. buf[i] = toupper(buf[i]);:将小写字母转换为大写字母。
  47. printf("send buf: %s\n", buf);:打印转换后的数据。
  48. write(cfd, buf, len);:向客户端发送数据。
  49. close(lfd);:关闭监听套接字。

函数的意思如下:

  • socket:创建套接字。
  • bind:将套接字和本地的IP port绑定。
  • listen:设置套接字为监听状态。
  • accept:等待并接受客户端连接请求。
  • read:从套接字中读取数据。
  • write:向套接字中写入数据。
  • perror:打印错误信息。
  • exit:退出程序。
  • printf:打印信息。
  • memset:将内存区域清零。
  • htonlhtonsntohlntohs:字节序转换函数。
  • close:关闭套接字。
#include stdioh#include unistdh#include stdlibh#include systypesh#include sysstath#include stringh#include arpaineth#include ctypehint mainint argc const char argv 创建监听的套接字 int lfd = socketAF_I

原文地址: http://www.cveoy.top/t/topic/i7ud 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录