我为自己的个人使用制作了一个服务器应用程序,但是当客户端断开连接时,我总是遇到问题。我最近才意识到这是由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