为什么我的服务器没有等待接收来自客户端的回复

Why is my server not waiting to receive reply from client?

本文关键字:客户端 回复 服务器 我的 等待 为什么      更新时间:2023-10-16

我正在制作一个小程序,它在同一台机器上有一个服务器和客户端通信,确实如此。但是我无法让服务器等待从客户端接收消息。为什么循环不像第一次那样在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 closedn";
        cleanup(acceptSocket);
        return 0;
    }
    else
    {
        cerr << "ERROR: Failed to receive messagen";
        cleanup(acceptSocket);
        return 1;
    }

    strcpy_s(sendMessage, "Activation was successful!nnn");
    int iSend = send(acceptSocket, sendMessage, strlen(sendMessage), 0);
    if (iSend == SOCKET_ERROR)
    {
        cerr << "ERROR: Failed to send messagen";
        cleanup(acceptSocket);
        return 1;
    }
}

您在其中一个套接字上遇到了流结束,但您的代码没有正确检查它。代码未正确检查任何返回值。你似乎认为

iRecvA && iRecvB > 0

如果它们都是积极的,则为真,并且

iRecvA && iRecvB == 0

如果它们都为零,则为 true。他们不是。您需要单独检查它们,并打印实际错误。在尝试第二recv(),之前,您应该真正检查第一个recv()的结果,但要使用现有的代码结构:

if (iRecvA < 0 || iRecvB < 0)
{
    cerr << "ERROR: " << strerr[errno] << "Failed to receive messagen";
    close(iRecvA);
    close(iRecvB);
    cleanup(acceptSocket);
    return 1;
}
// else
if (iRecvA == 0 || iRecvB == 0)
{
    cout << "Connection closedn";
    close(iRecvA);
    close(iRecvB);
    cleanup(acceptSocket);
    return 0;
}
// else
{
    // stuff
}

另请注意,return之后的else是多余的。