我正在尝试学习winsock,我正在尝试让服务器处理多个请求,并且遇到了这个答案: TCP Winsock: accept multiple connections/clients
一切都很好,现在我有一个看起来像这样的代码(我将跳过整个代码,并把我认为重要的,如果你认为你可以帮助但需要澄清,请不要犹豫告诉我)< / p>
void NetworkServer::acceptClientSocket()
{
sockaddr * dummy = NULL;
while (ClientSocket = accept(ListenSocket, dummy, NULL)){
if (ClientSocket == INVALID_SOCKET) {
printf("accept failed with error: %d\n", WSAGetLastError());
closesocket(ListenSocket);
WSACleanup();
exit(1);
}
unsigned threadID;
hThread = (HANDLE)_beginthreadex(NULL, 0, &handleClientRequest, (void*)ClientSocket, 0, &threadID);
}
closesocket(ListenSocket);
}
看起来像这样的handleClientRequest函数:
unsigned __stdcall handleClientRequest(void* data)
{
SOCKET client_socket = (SOCKET)data;
DataReceiver dataReceiver(client_socket);
dataReceiver.receiveClientData();
return 1;
}
经过几个小时的调试后,我看到程序到达了返回,然后挂起。我知道_endthreadex后来被立即调用,但程序仍然挂起。数据接收器是一个根据调试器完美地完成工作的对象。
请帮忙。