지금까지는 비 차단 채팅 서버를 작성했지만 서버는 정상적으로 작동하지만 부분 전송이 발생하면이를 해결하는 방법을 알 수 없습니다. send (int, char *, int); 함수는 항상 성공시 0을 반환하고 실패한 경우에는 -1을 반환합니다. 필자가 읽은 모든 doc/man 페이지는 실제로 네트워크 버퍼에 공급되는 바이트 수를 반환해야한다고 말합니다. 나는 서버에 데이터를 보내고 recv를 문제없이 반복적으로 수행 할 수 있는지 확인했다.Berkeley Socket 보내기 성공적인 비 차단 전송시 0을 반환합니다.
이것은 보내기를 호출하는 데 사용하는 기능입니다. 둘 다 콘솔에 반환 데이터를 먼저 인쇄하려고 시도한 다음 ReturnValue에 줄 바꿈을 시도했습니다. 디버깅하는 동안. 동일한 결과, ReturnValue는 항상 0 또는 -1입니다.
int Connection::Transmit(string MessageToSend)
{
// check for send attempts on a closed socket
// return if it happens.
if(this->Socket_Filedescriptor == -1)
return -1;
// Send a message to the client on the other end
// note, the last parameter is a flag bit which
// is used for declaring out of bound data transmissions.
ReturnValue = send(Socket_Filedescriptor,
MessageToSend.c_str(),
MessageToSend.length(),
0);
return ReturnValue;
}
반환 값이 -1이면 어떤 오류가 발생합니까? 'errno'의 값을 확인하거나'perror'를 사용하십시오 –
'send'가'-1'을 반환하면 POSIX 시스템 (Linux 또는 OSX)에서'errno'를 확인하거나 Windows에서'WSAGetLastError'를 사용해야합니다. 이것은 무엇이 잘못되었는지 이해하는 데 도움이됩니다. –
'send (int, char *, int);'버클리 소켓'send'와 정확히 일치하지 않습니다. 어떤 플랫폼을 사용하고 있습니까? 'send' 대신'write'를 사용하려고 했습니까? –