#include #include #include #include #include #include #include #define PORT 8080 #define MAX_CLIENTS 5 #define BUFFER_SIZE 1024 // 声明 handle_client 函数 void handle_client(int client_socket); int main() { int server_fd, new_socket; struct sockaddr_in server_addr, client_addr; socklen_t client_len = sizeof(client_addr); char buffer[BUFFER_SIZE]; int opt = 1; // 创建套接字 server_fd = socket(AF_INET, SOCK_STREAM, 0); if (server_fd < 0) { perror("socket creation failed"); exit(EXIT_FAILURE); } // 设置选项,允许重用地址 if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) { perror("setsockopt failed"); exit(EXIT_FAILURE); } server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = INADDR_ANY; server_addr.sin_port = htons(PORT); // 绑定 if (bind(server_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) { perror("bind failed"); exit(EXIT_FAILURE); } // 监听 if (listen(server_fd, MAX_CLIENTS) < 0) { perror("listen failed"); exit(EXIT_FAILURE); } std::cout << "Server listening on port " << PORT << std::endl; while (true) { client_len = sizeof(client_addr); new_socket = accept(server_fd, (struct sockaddr *)&client_addr, &client_len); if (new_socket < 0) { perror("accept failed"); exit(EXIT_FAILURE); } std::cout << "New client connected from " << inet_ntoa(client_addr.sin_addr) << " port " << ntohs(client_addr.sin_port) << std::endl; // 创建并启动线程处理客户端 std::thread(handle_client, new_socket).detach(); } close(server_fd); return 0; } // 定义 handle_client 函数 void handle_client(int client_socket) { while (true) { char buffer[BUFFER_SIZE]; memset(buffer, 0, BUFFER_SIZE); // 清空缓冲区 int nbytes = read(client_socket, buffer, BUFFER_SIZE); if (nbytes <= 0) { std::cout << "Client disconnected." << std::endl; close(client_socket); break; } std::cout << "Received message from client: " << buffer << std::endl; // 这里可以添加更多的处理逻辑 } }