更新时间: 试题数量: 购买人数: 提供作者:

有效期: 个月

章节介绍: 共有个章节

收藏
搜索
题库预览
熟读下面的服务器和客户端代码,掌握整体过程。(重点,尤其是每一步使用的函数及相关参数) 服务器端: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <sys/socket.h> #include <unistd.h> int main() { int serv_sock, clnt_sock; struct sockaddr_in serv_addr, clnt_addr; socklen_t clnt_addr_size; char buffer[100]; int str_len; // 1. 创建套接字 serv_sock = socket(AF_INET, SOCK_STREAM, 0); if (serv_sock == -1) { perror("socket() error"); exit(1); } // 2. 设置服务器地址信息 memset(&serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); // 监听本机所有网卡 serv_addr.sin_port = htons(8080); // 3. 绑定套接字 if (bind(serv_sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) == -1) { perror("bind() error"); exit(1); } // 4. 监听 if (listen(serv_sock, 5) == -1) { perror("listen() error"); exit(1); } printf("Server is running on port 8080...\n"); // 5. 接受客户端连接 clnt_addr_size = sizeof(clnt_addr); clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_size); if (clnt_sock == -1) { perror("accept() error"); exit(1); } printf("Client connected.\n"); // 6. 接收客户端消息 str_len = recv(clnt_sock, buffer, sizeof(buffer) - 1, 0); if (str_len == -1) { perror("recv() error"); exit(1); } buffer[str_len] = '\0'; printf("Received: %s", buffer); // 7. 回显消息给客户端 if (send(clnt_sock, buffer, str_len, 0) == -1) { perror("send() error"); exit(1); } // 8. 关闭套接字 close(clnt_sock); close(serv_sock); return 0; } 客户端: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <sys/socket.h> #include <unistd.h> int main() { int sock; struct sockaddr_in serv_addr; char message[100]; int str_len; /* 1. 创建套接字 */ sock = socket(AF_INET, SOCK_STREAM, 0); if (sock == -1) { perror("socket() error"); exit(1); } /* 2. 设置服务器地址信息 */ memset(&serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); serv_addr.sin_port = htons(8080); /* 3. 连接服务器 */ if (connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) == -1) { perror("connect() error"); exit(1); } printf("Connected to server. Enter message: "); fgets(message, sizeof(message), stdin); /* 4. 向服务器发送数据 */ if (send(sock, message, strlen(message), 0) == -1) { perror("send() error"); exit(1); } /* 5. 接收服务器的回显消息 */ str_len = recv(sock, message, sizeof(message) - 1, 0); if (str_len == -1) { perror("recv() error"); exit(1); } message[str_len] = 0; printf("Message from server: %s\n", message); /* 6. 关闭套接字 */ close(sock); return 0; }【缺少答案,请补充】