为了账号安全,请及时绑定邮箱和手机立即绑定

作业社区

探索学习新天地,共享知识资源!

0 提交作业
0 布置作业
0 满分作业
得分 100
学习任务

浪潮君 的学生作业:

#include // 标准输入输出函数,如 printf、perror #include // 提供 exit() 等函数 #include // 字符串处理函数,如 memset、strcmp #include // 提供 close()、read()、write() 等函数 #include // 提供网络地址转换函数,如 inet_ntoa、htons // ----------------- 宏定义 ----------------- #define SERVER_PORT 8888 // 服务器监听的端口号 #define BUFFER_SIZE 1024 // 数据缓冲区大小 #define BACKLOG 5 // 监听队列的最大长度(排队等待 accept 的客户端数量) int main() { int listen_fd, conn_fd; // listen_fd:监听 socket;conn_fd:已连接 socket struct sockaddr_in server_addr, client_addr; // 存储服务器/客户端的 IP 和端口 socklen_t client_len; // 用于记录 client_addr 的长度 char buffer[BUFFER_SIZE]; // 数据缓冲区,用于接收与发送 // ---------- 1. 创建 TCP socket ---------- listen_fd = socket(AF_INET, SOCK_STREAM, 0); // 创建面向连接(TCP)的 IPv4 套接字 if (listen_fd < 0) { perror("socket 创建失败"); // 若创建失败,输出错误信息并退出 exit(1); } // ---------- 2. 配置服务器地址 ---------- memset(&server_addr, 0, sizeof(server_addr)); // 清空 server_addr 结构体 server_addr.sin_family = AF_INET; // 使用 IPv4 协议族 server_addr.sin_addr.s_addr = INADDR_ANY; // 监听本机所有网卡上的连接 server_addr.sin_port = htons(SERVER_PORT); // 设置监听端口(主机字节序 → 网络字节序) // ---------- 3. 绑定 socket ---------- if (bind(listen_fd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) { perror("bind 绑定失败"); // 绑定失败通常是端口被占用 close(listen_fd); // 关闭 socket exit(1); } // ---------- 4. 启动监听 ---------- if (listen(listen_fd, BACKLOG) < 0) { perror("listen 监听失败"); close(listen_fd); exit(1); } printf("服务器已启动,监听端口 %d...\n", SERVER_PORT); // ---------- 5. 主循环:接受客户端连接 ---------- while (1) { client_len = sizeof(client_addr); // 设置 client_len 的初始值(必须) // 等待客户端连接(阻塞),返回用于通信的新 socket conn_fd = accept(listen_fd, (struct sockaddr*)&client_addr, &client_len); if (conn_fd < 0) { perror("accept 失败"); // accept 失败也不会退出服务,继续等待下一个连接 continue; } // 打印客户端的 IP 和端口(便于调试) printf("客户端已连接:%s:%d\n", inet_ntoa(client_addr.sin_addr), // 将 IP 转为字符串 ntohs(client_addr.sin_port)); // 将端口从网络字节序转为主机字节序 // ---------- 6. 收发消息循环 ---------- while (1) { // 接收客户端发来的数据 ssize_t len = recv(conn_fd, buffer, sizeof(buffer) - 1, 0); if (len

得分 100
学习任务

浪潮君 的学生作业:

#include // 标准输入输出函数 #include // 提供 exit() 等函数 #include // 提供 memset(), strcmp() 等字符串处理函数 #include // 提供 close() 函数 #include // 提供网络地址处理函数,如 inet_ntoa() // 宏定义 #define SERVER_PORT 8888 // 服务器监听端口号 #define BUFFER_SIZE 1024 // 缓冲区大小 #define BACKLOG 5 // 监听队列的最大长度(允许同时排队连接的客户端数量) int main() { int listen_fd, conn_fd; // listen_fd:监听 socket,conn_fd:与客户端通信的 socket struct sockaddr_in server_addr, client_addr; // server_addr:本地 IP/端口,client_addr:客户端 IP/端口 socklen_t client_len; // 用于存储客户端地址结构体的大小 char buffer[BUFFER_SIZE]; // 用于接收/发送数据的缓冲区 // 1. 创建 TCP socket(AF_INET 表示 IPv4,SOCK_STREAM 表示 TCP) listen_fd = socket(AF_INET, SOCK_STREAM, 0); if (listen_fd < 0) { perror("socket 创建失败"); exit(1); // 程序异常退出 } // 2. 配置服务器地址结构体(清空 → 设置地址族、IP、端口) memset(&server_addr, 0, sizeof(server_addr)); // 清空结构体 server_addr.sin_family = AF_INET; // 使用 IPv4 地址 server_addr.sin_addr.s_addr = INADDR_ANY; // 监听本机任意 IP 地址(即所有网卡) server_addr.sin_port = htons(SERVER_PORT); // 设置监听端口(需要使用网络字节序) // 3. 绑定 socket 到指定的 IP 地址和端口 if (bind(listen_fd, (struct sockaddr *) &server_addr, sizeof(server_addr)) < 0) { perror("bind 绑定失败"); close(listen_fd); // 关闭 socket exit(1); } // 4. 开始监听端口,准备接收客户端连接 if (listen(listen_fd, BACKLOG) < 0) { perror("listen 监听失败"); close(listen_fd); exit(1); } printf("服务器已启动,监听端口 %d...\n", SERVER_PORT); // 5. 主循环:等待客户端连接 while (1) { client_len = sizeof(client_addr); // 初始化地址长度 // 阻塞等待客户端连接,成功时返回用于通信的 conn_fd conn_fd = accept(listen_fd, (struct sockaddr *) &client_addr, &client_len); if (conn_fd < 0) { perror("accept 失败"); continue; // 本次失败后继续等待下一个连接 } // 打印客户端的 IP 和端口 printf("客户端已连接:%s:%d\n", inet_ntoa(client_addr.sin_addr), // IP 地址转为字符串 ntohs(client_addr.sin_port)); // 端口号转为主机字节序 // 6. 接收客户端消息并回应(连接期间的通信循环) while (1) { // 接收客户端发送的数据 ssize_t len = recv(conn_fd, buffer, sizeof(buffer) - 1, 0); if (len

得分 100
学习任务

浪潮君 的学生作业:

#include // 标准输入输出函数 #include // 提供 exit() 等函数 #include // 提供 memset(), strcmp() 等字符串处理函数 #include // 提供 close() 函数 #include // 提供网络地址处理函数,如 inet_ntoa() // 宏定义 #define SERVER_PORT 8888 // 服务器监听端口号 #define BUFFER_SIZE 1024 // 缓冲区大小 #define BACKLOG 5 // 监听队列的最大长度(允许同时排队连接的客户端数量) int main() { int listen_fd, conn_fd; // listen_fd:监听 socket,conn_fd:与客户端通信的 socket struct sockaddr_in server_addr, client_addr; // server_addr:本地 IP/端口,client_addr:客户端 IP/端口 socklen_t client_len; // 用于存储客户端地址结构体的大小 char buffer[BUFFER_SIZE]; // 用于接收/发送数据的缓冲区 // 1. 创建 TCP socket(AF_INET 表示 IPv4,SOCK_STREAM 表示 TCP) listen_fd = socket(AF_INET, SOCK_STREAM, 0); if (listen_fd < 0) { perror("socket 创建失败"); exit(1); // 程序异常退出 } // 2. 配置服务器地址结构体(清空 → 设置地址族、IP、端口) memset(&server_addr, 0, sizeof(server_addr)); // 清空结构体 server_addr.sin_family = AF_INET; // 使用 IPv4 地址 server_addr.sin_addr.s_addr = INADDR_ANY; // 监听本机任意 IP 地址(即所有网卡) server_addr.sin_port = htons(SERVER_PORT); // 设置监听端口(需要使用网络字节序) // 3. 绑定 socket 到指定的 IP 地址和端口 if (bind(listen_fd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) { perror("bind 绑定失败"); close(listen_fd); // 关闭 socket exit(1); } // 4. 开始监听端口,准备接收客户端连接 if (listen(listen_fd, BACKLOG) < 0) { perror("listen 监听失败"); close(listen_fd); exit(1); } printf("服务器已启动,监听端口 %d...\n", SERVER_PORT); // 5. 主循环:等待客户端连接 while (1) { client_len = sizeof(client_addr); // 初始化地址长度 // 阻塞等待客户端连接,成功时返回用于通信的 conn_fd conn_fd = accept(listen_fd, (struct sockaddr*)&client_addr, &client_len); if (conn_fd < 0) { perror("accept 失败"); continue; // 本次失败后继续等待下一个连接 } // 打印客户端的 IP 和端口 printf("客户端已连接:%s:%d\n", inet_ntoa(client_addr.sin_addr), // IP 地址转为字符串 ntohs(client_addr.sin_port)); // 端口号转为主机字节序 // 6. 接收客户端消息并回应(连接期间的通信循环) while (1) { // 接收客户端发送的数据 ssize_t len = recv(conn_fd, buffer, sizeof(buffer) - 1, 0); if (len

得分 100
学习任务

浪潮君 的学生作业:

#include // 提供标准输入输出函数(如 printf) #include // 提供 exit(), malloc() 等函数 #include // 提供字符串处理函数,如 memset(), strcmp() #include // 提供 close(), read(), write() 等函数 #include // 提供 IP 地址转换与套接字相关函数(如 inet_pton) // ------------------ 常量定义 ------------------ #define SERVER_IP "127.0.0.1" // 要连接的服务器 IP(本地回环地址) #define SERVER_PORT 8888 // 服务器端口号 #define BUFFER_SIZE 1024 // 接收/发送缓冲区大小 int main() { int sockfd; // 与服务器通信的 socket 文件描述符 struct sockaddr_in server_addr; // 服务器地址结构体 char buffer[BUFFER_SIZE]; // 数据缓冲区 // ---------- 1. 创建 TCP socket ---------- sockfd = socket(AF_INET, SOCK_STREAM, 0); // 创建面向连接的 IPv4 套接字 if (sockfd < 0) { perror("socket 创建失败"); // 如果创建失败,打印错误并退出 exit(1); } // ---------- 2. 配置服务器地址 ---------- memset(&server_addr, 0, sizeof(server_addr)); // 清空结构体内存 server_addr.sin_family = AF_INET; // 设置地址族为 IPv4 server_addr.sin_port = htons(SERVER_PORT); // 设置端口号(主机字节序 → 网络字节序) inet_pton(AF_INET, SERVER_IP, &server_addr.sin_addr); // IP 地址字符串 → 网络格式 // ---------- 3. 主动连接服务器 ---------- if (connect(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) { perror("连接服务器失败"); // 若连接失败,关闭 socket 并退出 close(sockfd); exit(1); } printf("已连接服务器 %s:%d\n", SERVER_IP, SERVER_PORT); // ---------- 4. 通信主循环 ---------- while (1) { printf("请输入消息(exit 退出):"); fflush(stdout); // 清空输出缓冲区,确保提示立即打印 // 从标准输入读取一行字符串到 buffer 中 if (fgets(buffer, sizeof(buffer), stdin) == NULL) break; // 移除换行符(fgets 会保留 \n) buffer[strcspn(buffer, "\n")] = '\0'; // ---------- 4.1 判断是否是退出指令 ---------- if (strcmp(buffer, "exit") == 0) { send(sockfd, buffer, strlen(buffer), 0); // 通知服务器退出 printf("客户端已断开连接。\n"); break; // 跳出通信循环,准备退出 } // ---------- 4.2 向服务器发送消息 ---------- send(sockfd, buffer, strlen(buffer), 0); // 发送用户输入的内容给服务器 // ---------- 4.3 等待服务器响应 ---------- ssize_t len = recv(sockfd, buffer, sizeof(buffer) - 1, 0); // 接收服务器返回的数据 if (len

得分 100
学习任务

浪潮君 的学生作业:

#include // 标准输入输出函数 #include // 提供 exit() 等函数 #include // 提供 memset(), strcmp() 等字符串处理函数 #include // 提供 close() 函数 #include // 提供网络地址处理函数,如 inet_ntoa() // 宏定义 #define SERVER_PORT 8888 // 服务器监听端口号 #define BUFFER_SIZE 1024 // 缓冲区大小 #define BACKLOG 5 // 监听队列的最大长度(允许同时排队连接的客户端数量) int main() { int listen_fd, conn_fd; // listen_fd:监听 socket,conn_fd:与客户端通信的 socket struct sockaddr_in server_addr, client_addr; // server_addr:本地 IP/端口,client_addr:客户端 IP/端口 socklen_t client_len; // 用于存储客户端地址结构体的大小 char buffer[BUFFER_SIZE]; // 用于接收/发送数据的缓冲区 // 1. 创建 TCP socket(AF_INET 表示 IPv4,SOCK_STREAM 表示 TCP) listen_fd = socket(AF_INET, SOCK_STREAM, 0); if (listen_fd < 0) { perror("socket 创建失败"); exit(1); // 程序异常退出 } // 2. 配置服务器地址结构体(清空 → 设置地址族、IP、端口) memset(&server_addr, 0, sizeof(server_addr)); // 清空结构体 server_addr.sin_family = AF_INET; // 使用 IPv4 地址 server_addr.sin_addr.s_addr = INADDR_ANY; // 监听本机任意 IP 地址(即所有网卡) server_addr.sin_port = htons(SERVER_PORT); // 设置监听端口(需要使用网络字节序) // 3. 绑定 socket 到指定的 IP 地址和端口 if (bind(listen_fd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) { perror("bind 绑定失败"); close(listen_fd); // 关闭 socket exit(1); } // 4. 开始监听端口,准备接收客户端连接 if (listen(listen_fd, BACKLOG) < 0) { perror("listen 监听失败"); close(listen_fd); exit(1); } printf("服务器已启动,监听端口 %d...\n", SERVER_PORT); // 5. 主循环:等待客户端连接 while (1) { client_len = sizeof(client_addr); // 初始化地址长度 // 阻塞等待客户端连接,成功时返回用于通信的 conn_fd conn_fd = accept(listen_fd, (struct sockaddr*)&client_addr, &client_len); if (conn_fd < 0) { perror("accept 失败"); continue; // 本次失败后继续等待下一个连接 } // 打印客户端的 IP 和端口 printf("客户端已连接:%s:%d\n", inet_ntoa(client_addr.sin_addr), // IP 地址转为字符串 ntohs(client_addr.sin_port)); // 端口号转为主机字节序 // 6. 接收客户端消息并回应(连接期间的通信循环) while (1) { // 接收客户端发送的数据 ssize_t len = recv(conn_fd, buffer, sizeof(buffer) - 1, 0); if (len

微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号