"#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <unistd.h>\n#include <fcntl.h>\n#include <sys/types.h>\n#include <sys/socket.h>\n#include <netinet/in.h>\n#include <arpa/inet.h>\n\n#define PORT 8888 // 飞鸽传书监听的端口号\n#define MAX_BUFFER_SIZE 1024 // 缓冲区大小\n\nvoid error(const char *msg) {\n perror(msg);\n exit(1);\n}\n\nint main(int argc, char *argv[]) {\n int sockfd, newsockfd, n;\n socklen_t clilen;\n char buffer[MAX_BUFFER_SIZE];\n struct sockaddr_in serv_addr, cli_addr;\n\n // 创建套接字\n sockfd = socket(AF_INET, SOCK_STREAM, 0);\n if (sockfd < 0) {\n error("ERROR opening socket");\n }\n\n // 初始化服务器地址结构体\n bzero((char *) &serv_addr, sizeof(serv_addr));\n serv_addr.sin_family = AF_INET;\n serv_addr.sin_addr.s_addr = INADDR_ANY;\n serv_addr.sin_port = htons(PORT);\n\n // 绑定套接字到指定地址和端口号\n if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) {\n error("ERROR on binding");\n }\n\n // 监听客户端连接请求\n listen(sockfd, 5);\n clilen = sizeof(cli_addr);\n\n while (1) {\n // 接受客户端连接请求\n newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);\n if (newsockfd < 0) {\n error("ERROR on accept");\n }\n\n // 读取客户端发送的文件名\n bzero(buffer, MAX_BUFFER_SIZE);\n n = read(newsockfd, buffer, MAX_BUFFER_SIZE - 1);\n if (n < 0) {\n error("ERROR reading from socket");\n }\n\n // 打开文件\n int filefd = open(buffer, O_RDONLY);\n if (filefd < 0) {\n error("ERROR opening file");\n }\n\n // 读取文件内容并发送给客户端\n bzero(buffer, MAX_BUFFER_SIZE);\n while ((n = read(filefd, buffer, MAX_BUFFER_SIZE - 1)) > 0) {\n if (write(newsockfd, buffer, n) < 0) {\n error("ERROR writing to socket");\n }\n bzero(buffer, MAX_BUFFER_SIZE);\n }\n\n // 关闭文件\n close(filefd);\n\n // 关闭客户端连接\n close(newsockfd);\n }\n\n // 关闭服务器套接字\n close(sockfd);\n\n return 0;\n}\n"\n

Linux 飞鸽传书代码实现 - 基于 TCP 的文件传输工具

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

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