我爲自己的個人使用製作了一個服務器應用程序,但是當客戶端斷開連接時,我總是遇到問題。我最近才意識到這是由recv
函數返回的項目無法正確識別而引起的。 例如:從函數返回的C++問題
char* mrecv(bool show, LPVOID pointerToObject) //Recieve a message
{
int iResult2 = recv(ClientSocket, recvbuf, 512, 0);
if (iResult2 > 0) {
if ((strncmp(recvbuf,"/",1)) != 0) {
printm(recvbuf, pointerToObject);
}
else if (iResult2 == 0) {
printf("Connection closing...\n");
closesocket(ClientSocket);
WSACleanup();
return "1";
}
else {
printm("recv failed with error: %d\n", WSAGetLastError());
printm("Client must have disconnected. Please select a new client.");
return "1";
}
return recvbuf;
}
當客戶端斷開,該函數返回「1」正確地連接到母體功能。然而,當我檢查它所以...:檢查是否返回"1"
,但1
打印屏幕完美
DWORD WINAPI recvfunc(LPVOID pointerToObject)
{
while (true) {
ClientSocket=client[currentclient].cs;
char* p = mrecv(true, pointerToObject);
std::cout<<p<<"\n";
if (p == "1") {
client[currentclient].con=false;
ClientSocket=client[lastclient].cs;
return 1;
}
}
return 0;
}
的if
語句返回false。
任何人都知道爲什麼會發生這種情況?
我使用winsock,如果你沒有注意到。
感謝提前:)
編輯:: 下面所有的答案,因爲這編輯的似乎是同樣的事情,他們都不能解決問題。如果你看看那裏列出的第一個函數^,你會發現我顯然甚至在之前遇到過這個問題,不得不使用這個解決方案。所以它看起來像我的大腦只是放棄了我。無論如何,感謝所有的協助。 :)
哦,我的。非常感謝你。我記得在我的項目的早些時候必須使用該解決方案,但它完全放棄了我的想法。 我現在就試試看,但我幾乎肯定這是解決方案。 – Phixle 2014-08-28 19:34:20
等一下......這就是我列在那裏的第一個功能。 -.- 恩......對不起人。我猜想我的腦子裏有點爆炸。 – Phixle 2014-08-28 19:35:14