我正在处理服务器-客户端聊天应用程序,并且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, int _FD, size_t _msgLength)
{
if(!_serverNet || !_replyMsg || _FD < 0)
{
return 0;
}
return send(_FD, _replyMsg, _msgLength, 0);
}
当我调用recv()和send()在两端仅一次时,所有其他尝试在客户端和服务器之间发送数据的方法都可以正常工作。 似乎只有在循环中调用recv()和send()时才会出现问题。谁能提供一些建议?预先感谢!