以下是一个使用C++编写的并发TCP服务器的简单示例代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
void* handleClient(void* arg) {
int clientSocket = *((int*)arg);
char buffer[1024];
memset(buffer, 0, sizeof(buffer));
read(clientSocket, buffer, sizeof(buffer) - 1);
std::cout << "Received message: " << buffer << std::endl;
const char* response = "Hello from server!";
write(clientSocket, response, strlen(response));
close(clientSocket);
delete (int*)arg;
pthread_exit(NULL);
}
int main() {
int serverSocket = socket(AF_INET, SOCK_STREAM, 0);
if (serverSocket == -1) {
std::cerr << "Failed to create socket!" << std::endl;
return -1;
}
sockaddr_in serverAddress{};
serverAddress.sin_family = AF_INET;
serverAddress.sin_addr.s_addr = INADDR_ANY;
serverAddress.sin_port = htons(1234);
if (bind(serverSocket, (struct sockaddr*)&serverAddress, sizeof(serverAddress)) == -1) {
std::cerr << "Failed to bind to port 1234!" << std::endl;
return -1;
}
if (listen(serverSocket, 5) == -1) {
std::cerr << "Failed to listen on socket!" << std::endl;
return -1;
}
std::cout << "Server started. Listening on port 1234..." << std::endl;
while (true) {
sockaddr_in clientAddress{};
socklen_t clientAddressSize = sizeof(clientAddress);
int clientSocket = accept(serverSocket, (struct sockaddr*)&clientAddress, &clientAddressSize);
if (clientSocket == -1) {
std::cerr << "Failed to accept client connection!" << std::endl;
continue;
}
pthread_t thread;
int* clientSocketPtr = new int(clientSocket);
if (pthread_create(&thread, NULL, handleClient, (void*)clientSocketPtr) != 0) {
std::cerr << "Failed to create thread!" << std::endl;
delete clientSocketPtr;
continue;
}
}
close(serverSocket);
return 0;
}
这个示例代码创建了一个TCP服务器,监听端口1234。它使用一个无限循环来接受客户端连接,并为每个连接创建一个新线程来处理客户端请求。每个客户端连接都会调用handleClient
函数来处理。
在handleClient
函数中,首先从客户端读取消息,然后发送一个简单的响应消息。最后,关闭客户端套接字,并在新线程中退出。
在main
函数中,首先创建服务器套接字,然后绑定到端口1234,并开始监听连接。接下来,循环接受客户端连接,并为每个连接创建一个新线程。如果创建线程失败,将继续接受下一个连接。
请注意,这只是一个简单的示例,没有处理多个并发连接的性能和资源管理问题。在实际应用中,可能需要使用线程池或其他并发处理机制来更好地管理并发连接。