#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
该代码的返回值是0,表示程序正常运行结束。
每行的意思如下:
#include <stdio.h>:包含标准输入输出库的头文件。#include <unistd.h>:包含系统调用库的头文件。#include <stdlib.h>:包含标准库的头文件。#include <sys/types.h>:包含系统类型定义的头文件。#include <sys/stat.h>:包含系统状态定义的头文件。#include <string.h>:包含字符串处理函数的头文件。#include <arpa/inet.h>:包含互联网地址族定义的头文件。#include <ctype.h>:包含字符处理函数的头文件。int main(int argc, const char* argv[]):主函数,程序的入口。int lfd = socket(AF_INET, SOCK_STREAM, 0);:创建监听的套接字。if(lfd == -1):如果套接字创建失败。perror("socket error");:打印错误信息。exit(1);:退出程序。struct sockaddr_in server;:定义服务器地址结构体。memset(&server, 0, sizeof(server));:将服务器地址结构体清零。server.sin_family = AF_INET;:设置地址族协议为IPv4。server.sin_port = htons(8888);:设置端口号为8888。server.sin_addr.s_addr = htonl(INADDR_ANY);:设置IP地址为任意可用地址。int ret = bind(lfd, (struct sockaddr*)&server, sizeof(server));:将套接字和本地的IP port绑定。if(ret == -1):如果绑定失败。perror("bind error");:打印错误信息。exit(1);:退出程序。ret = listen(lfd, 20);:设置套接字为监听状态,最大连接数为20。if(ret == -1):如果监听失败。perror("listen error");:打印错误信息。exit(1);:退出程序。struct sockaddr_in client;:定义客户端地址结构体。socklen_t len = sizeof(client);:获取客户端地址结构体的长度。int cfd = accept(lfd, (struct sockaddr*)&client, &len);:等待并接受客户端连接请求。if(cfd == -1):如果接受连接失败。perror("accept error");:打印错误信息。exit(1);:退出程序。printf(" accept successful !!!\n");:打印连接成功的提示信息。while(1):循环进行通信。char buf[1024] = {0};:定义接收缓冲区。int len = read(cfd, buf, sizeof(buf));:从客户端接收数据。if(len == -1):如果接收失败。perror("read error");:打印错误信息。exit(1);:退出程序。else if(len == 0):如果客户端断开连接。printf(" 客户端已经断开了连接 \n");:打印客户端断开连接的提示信息。close(cfd);:关闭客户端套接字。break;:跳出循环。printf("recv buf: %s\n", buf);:打印接收到的数据。for(int i=0; i<len; ++i):遍历接收到的数据。buf[i] = toupper(buf[i]);:将小写字母转换为大写字母。printf("send buf: %s\n", buf);:打印转换后的数据。write(cfd, buf, len);:向客户端发送数据。close(lfd);:关闭监听套接字。
函数的意思如下:
socket:创建套接字。bind:将套接字和本地的IP port绑定。listen:设置套接字为监听状态。accept:等待并接受客户端连接请求。read:从套接字中读取数据。write:向套接字中写入数据。perror:打印错误信息。exit:退出程序。printf:打印信息。memset:将内存区域清零。htonl、htons、ntohl、ntohs:字节序转换函数。close:关闭套接字。
原文地址: http://www.cveoy.top/t/topic/i7ud 著作权归作者所有。请勿转载和采集!