C++ 为什么我的服务器不等待从客户端接收回复?
我正在制作一个小程序,在同一台机器上有一个服务器和客户机进行通信,这是非常有用的。但是我不能让服务器等待从客户端接收消息。为什么循环不在C++ 为什么我的服务器不等待从客户端接收回复?,c++,visual-c++,networking,C++,Visual C++,Networking,我正在制作一个小程序,在同一台机器上有一个服务器和客户机进行通信,这是非常有用的。但是我不能让服务器等待从客户端接收消息。为什么循环不在int-iRecvA=recv处等待(acceptSocket,machId,STRLEN,0)行,就像第一次一样?我转到最后一个else while (!done) { int iRecvA = recv(acceptSocket, machId, STRLEN, 0); int iRecvB = recv(acceptSocket, seri
int-iRecvA=recv处等待(acceptSocket,machId,STRLEN,0)代码>行,就像第一次一样?我转到最后一个else
while (!done)
{
int iRecvA = recv(acceptSocket, machId, STRLEN, 0);
int iRecvB = recv(acceptSocket, serialNum, STRLEN, 0);
if (iRecvA && iRecvB > 0)
{
//stuff
}
else if (iRecvA && iRecvB == 0)
{
cout << "Connection closed\n";
cleanup(acceptSocket);
return 0;
}
else
{
cerr << "ERROR: Failed to receive message\n";
cleanup(acceptSocket);
return 1;
}
strcpy_s(sendMessage, "Activation was successful!\n\n\n");
int iSend = send(acceptSocket, sendMessage, strlen(sendMessage), 0);
if (iSend == SOCKET_ERROR)
{
cerr << "ERROR: Failed to send message\n";
cleanup(acceptSocket);
return 1;
}
}
while(!done)
{
int iRecvA=recv(acceptSocket,machId,STRLEN,0);
int iRecvB=recv(acceptSocket,serialNum,STRLEN,0);
如果(iRecvA&&iRecvB>0)
{
//东西
}
else if(iRecvA&&iRecvB==0)
{
cout您在一个套接字上遇到了流结束,但是您的代码没有正确地检查它。您的代码没有正确地检查任何返回值。您似乎认为
iRecvA && iRecvB > 0
如果它们都是正面的,那么这是真的,并且
iRecvA && iRecvB == 0
如果它们都为零,则为true。它们不是。您需要单独检查它们,并打印实际错误。您应该在尝试第二个recv(),
之前检查第一个recv()的结果,但要使用现有的代码结构:
if (iRecvA < 0 || iRecvB < 0)
{
cerr << "ERROR: " << strerr[errno] << "Failed to receive message\n";
close(iRecvA);
close(iRecvB);
cleanup(acceptSocket);
return 1;
}
// else
if (iRecvA == 0 || iRecvB == 0)
{
cout << "Connection closed\n";
close(iRecvA);
close(iRecvB);
cleanup(acceptSocket);
return 0;
}
// else
{
// stuff
}
if(iRecvA<0 | | iRecvB<0)
{
cerr当您从系统调用(如recv()中)中得到错误时,您必须打印它,而不仅仅是您自己设计的一些消息。否则,调试将变成一个纯粹的猜测游戏。