好吧,所以我使用WinSockets2來製作一個非常簡單的服務器客戶端應用程序。我有我的套接字初始化,我試圖讓服務器成爲多用戶。我幾乎100%肯定,到目前爲止,服務器套接字已正確形成,並且我100%確定客戶端套接字是正確的,因爲我使用了另一臺服務器。雖然,recv
函數失敗,錯誤WSAENOTSOCK
。有問題的代碼:發送一個有效的套接字後WSAENOTSOCK錯誤
unsigned __stdcall client(void *data) {
SOCKET clientSocket = (SOCKET)data;
char inBuffer[DEFAULT_BUFLEN];
int inBytes = SOCKET_ERROR;
ZeroMemory(inBuffer, sizeof(inBuffer)); //make sure the buffer is 0
inBytes = recv(clientSocket, inBuffer, sizeof(inBuffer), 0);
printf("Client said: %s and there's this also %d\n", inBuffer, inBytes);
if (inBytes == SOCKET_ERROR) {
printf("eek! Something went wrong! %ld\n", WSAGetLastError());
}
return 0;
}
和它下面一點點......
bool serverOn = true;
while (clientSocket = accept(listenSocket, NULL, NULL) && serverOn) {
//http://stackoverflow.com/questions/15185380/tcp-winsock-accept-multiple-connections-clients
unsigned threadID;
HANDLE hThread = (HANDLE)_beginthreadex(NULL, 0, &client, (void*)clientSocket, 0, &threadID);
}
if (iResult = shutdown(clientSocket, SD_SEND) == SOCKET_ERROR) { //clean up and end everything
printf("shutdown failed: %d\n", WSAGetLastError());
closesocket(clientSocket);
WSACleanup();
return 1;
}
closesocket(clientSocket);
WSACleanup();
return 0;
}
如果需要任何其他代碼,請詢問。謝謝!
如果任何其他情況必須符合重現請張貼。謝謝。 - 什麼時候發生?當時是否設置了「serverOn」標誌?至少有一種氣味:你使用套接字創建每個線程,但是當while離開時,套接字(可能是0,但不是INVALID_SOCKET)是'shutdown'和'close'd。我期望處理'listenSocket'。但是關於上下文的信息很少...... – harper