TCP / IP协议:recv被阻止

问题描述

我正在处理服务器-客户端聊天应用程序,并且recv()在客户端被阻止时遇到问题。

客户代码

int CNetReceiveFromServerAll(int _serverFD,char* _bufferRecv,size_t _lenRecv)
{
    int readBytesFromServer = 0;
    int currentsBytes = 0;
    char* bufferPtr = _bufferRecv;

    while(1) 
    {
        currentsBytes = recv(_serverFD,bufferPtr,_lenRecv,0);
        printf("received bytes %d:",currentsBytes);
        if(currentsBytes <= 0) 
        {
            break;
        }
        readBytesFromServer += currentsBytes;
        bufferPtr += currentsBytes;
        _lenRecv -= currentsBytes;
    }

    return readBytesFromServer;
}

服务器代码

int ServerNetSendAll(ServerManager* _serverManager,const char* _buffer,int _FD,size_t _length)
{
    const char* ptr = _buffer;
    int bytesSent = 0;

    while(_length > 0)
    {
        bytesSent = ServerNetSend(_serverManager->m_serverNet,ptr,_FD,_length);
        if (bytesSent < 1) {
            break;
        }
        ptr += bytesSent;
        _length -= bytesSent;
    }

    return bytesSent;
}

int ServerNetSend(ServerNet* _serverNet,const char* _replyMsg,size_t _msgLength)
{
    if(!_serverNet || !_replyMsg || _FD < 0)
    {
        return 0;
    }

    return send(_FD,_replyMsg,_msgLength,0);
}

当我调用recv()和send()在两端仅一次时,所有其他尝试在客户端和服务器之间发送数据的方法都可以正常工作。 似乎只有在循环中调用recv()和send()时才会出现问题。谁能提供一些建议?预先感谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)