WinSock C ++控制台应用程序Instant Messanger recv没有阻止

时间:2015-02-11 11:37:40

标签: c++ sockets networking blocking

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

我遇到了问题,我无法解释,为什么这么简单的事情不起作用:

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

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 ...

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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