我正在尝试创建简单的 C++ 服务器客户端应用程序,它允许多个用户连接到服务器。问题是在为每个客户端创建新线程后,recv 函数开始使客户端应用程序崩溃。
这是我为每个连接的客户端创建新线程的代码:
while (ClientSocket = accept(ListenSocket, 0, 0)) {
if (ClientSocket == INVALID_SOCKET) {
printf("\ninvalid client socket", GetLastError());
continue;
}
unsigned threadID;
HANDLE myhandleB = (HANDLE) _beginthreadex(NULL, 0, &Server::receiveMessageThread, (void *) &ClientSocket, 0,
&threadID);
}
这是一种尝试从服务器接收消息的方法:
void waitForMessage() {
iResult = shutdown(ConnectSocket, SD_SEND);
if (iResult == SOCKET_ERROR) {
printf("shutdown failed with error: %d\n", WSAGetLastError());
closesocket(ConnectSocket);
WSACleanup();
}
do {
iResult = recv(ConnectSocket, recvbuf, recvbuflen, 0);
if ( iResult > 0 )
printf("Bytes received: %d\n", iResult);
else if ( iResult == 0 )
printf("Connection closed\n");
else
printf("recv failed with error: %d\n", WSAGetLastError());
} while( iResult > 0 );
}
调用后:
iResult = recv(ConnectSocket, recvbuf, recvbuflen, 0);
客户端应用程序停止响应。