"#include \n#include \n#include \n#include \n#include \n#include <sys/socket.h>\n#include <arpa/inet.h>\n#include <unistd.h>\n\n#define BUFFER_SIZE 1024\n#define MAX_CLIENTS 10\n\nstd::vector clientSockets;\n\nvoid handleClient(int clientSocket) {\n char buffer[BUFFER_SIZE];\n\n while (true) {\n memset(buffer, 0, BUFFER_SIZE);\n int bytesRead = recv(clientSocket, buffer, BUFFER_SIZE, 0);\n if (bytesRead <= 0) {\n break;\n }\n std::cout << "Received message: " << buffer << std::endl;\n\n // 广播消息给其他客户端\n for (int socket : clientSockets) {\n if (socket != clientSocket) {\n send(socket, buffer, bytesRead, 0);\n }\n }\n }\n\n // 客户端断开连接时,从客户端列表中移除\n auto it = std::find(clientSockets.begin(), clientSockets.end(), clientSocket);\n if (it != clientSockets.end()) {\n clientSockets.erase(it);\n }\n\n close(clientSocket);\n}\n\nint main() {\n int serverSocket, clientSocket;\n struct sockaddr_in serverAddress, clientAddress;\n\n // 创建套接字\n serverSocket = socket(AF_INET, SOCK_STREAM, 0);\n if (serverSocket == -1) {\n std::cerr << "Failed to create socket." << std::endl;\n return 1;\n }\n\n // 设置服务器地址\n serverAddress.sin_family = AF_INET;\n serverAddress.sin_addr.s_addr = INADDR_ANY;\n serverAddress.sin_port = htons(8888);\n\n // 绑定套接字到服务器地址\n if (bind(serverSocket, (struct sockaddr *)&serverAddress, sizeof(serverAddress)) == -1) {\n std::cerr << "Failed to bind socket to address." << std::endl;\n return 1;\n }\n\n // 监听连接请求\n if (listen(serverSocket, MAX_CLIENTS) == -1) {\n std::cerr << "Failed to listen for connections." << std::endl;\n return 1;\n }\n\n std::cout << "Server started. Waiting for connections..." << std::endl;\n\n // 接受连接请求并处理客户端\n while (true) {\n socklen_t clientAddressSize = sizeof(clientAddress);\n clientSocket = accept(serverSocket, (struct sockaddr *)&clientAddress, &clientAddressSize);\n if (clientSocket == -1) {\n std::cerr << "Failed to accept connection." << std::endl;\n return 1;\n }\n\n std::cout << "New client connected. IP address: " << inet_ntoa(clientAddress.sin_addr) << std::endl;\n\n // 将客户端套接字添加到客户端列表\n clientSockets.push_back(clientSocket);\n\n // 创建一个线程处理客户端消息\n std::thread clientThread(handleClient, clientSocket);\n clientThread.detach();\n }\n\n close(serverSocket);\n\n return 0;\n}\n"这是一个简单的多线程聊天室服务器代码。它创建一个服务器套接字,绑定到本地地址,并监听连接请求。当有客户端连接时,会创建一个新的线程来处理客户端的消息。\n\n服务器接收客户端发送的消息,并将其广播给其他已连接的客户端。当客户端断开连接时,会从客户端列表中移除该客户端。\n\n请注意,此代码仅为示例,可能不具备完整的错误处理和安全性。在实际应用中,可能需要添加更多的错误处理和安全性措施。"