WinSock C++ 控制台应用程序 Instant Messanger recv 不会阻止

WinSock C++ Console App Instant Messanger recv doesn't block

我有一个关于 WinSock 库的问题。 我正在尝试编写简单的即时消息程序。我只为 2 个客户端编写它,现在我想对其进行改进,因此它可以为其中的许多客户端工作,并且每个客户端都会发送一条消息,其中包含其编号和将向服务器接收消息的客户端编号。

我有一个问题,我想不通,为什么这么简单的事情不起作用:

发送消息的客户端函数代码:

void cClientIO::GetID(SOCKET & socket)
{
    u_long iMode = 0;
    ioctlsocket(socket, FIONBIO, &iMode);
    cout << "Type your ID:" << endl;
    cin >> buffer;
    send(socket, buffer, sizeof(buffer), 0);
    cout << "Type reciever ID" << endl;
    cin >> buffer;
    //We send buffer to the server;
    send(socket,buffer,sizeof(buffer), 0);
}


//Here is the server side:


void cRunServer::GetClientInfo(SOCKET & s){
    char buffer[256];
    int iResult;

    //BLOKUJ pls
    u_long iMode = 0;
    iResult = ioctlsocket(s, FIONBIO, &iMode);
    recv(s, buffer, sizeof(buffer), 0);
    cout << "Client number: " << buffer << WSAGetLastError() << endl;
    iResult = ioctlsocket(s, FIONBIO, &iMode);
    recv(s, buffer, sizeof(buffer), 0);
    cout << "Attempts to connect to client ID: " << WSAGetLastError() << endl;
}

我不知道发生了什么... 第一个 recv 阻止了我的代码,但第二个没有,只是继续...... 我尝试使用 GetWSALastError() 但它一直给我 0...

提前感谢您的帮助。

它不起作用,因为缓冲区的大小不匹配。客户端正在发送 char[2048],我只接收 char[256],第二次调用获取缓冲区的其余部分,这就是它继续流动的原因。