因此,我正在編寫Windows聊天,並且出於測試目的,我的客戶端程序每300毫秒向服務器發送一個「hello」消息。C++ Winsock2 recv junk
第一對夫婦的消息都不錯,但再像他們沒有理由開始變得junk-
很顯然,我想解決這個問題,我尋求你們的幫助:)這裏是我的代碼:
發送功能:
bool Target::Send(char *message)
{
int length = strlen(message);
int result = send(this->ccSock, (char*)&length, sizeof(int), 0);
if (result <= 0)
return false;
Sleep(10);
result = send(this->ccSock, message, length, 0);
return ((result > 0) ? true : false);
}
接收功能:
Message Server::Receive(SOCKET socket)
{
int length = 0;
int result = recv(socket, (char*)&length, sizeof(int), 0);
Sleep(10);
char *rcvData = new char[length];
result = recv(socket, rcvData, length, 0);
return { rcvData, result };
}
消息結構:
struct Message {
char *msg;
int size;
};
主發送代碼:
while (true)
{
if (!target->Send("hello"))
{
cout << "Connection broken\n";
target->Clean();
break;
}
Sleep(300);
}
主要接收代碼:
while (target.sock)
{
Message message = server->Receive(target.sock);
if (message.size > 0)
cout << message.msg << " (" << message.size << ")\n";
else
{
cout << "Target disconnected\n";
server->Clean();
break;
}
Sleep(1);
}
我真的很感激你的幫助以及解釋爲什麼會發生這種情況!
TL; DR;你有沒有關心適當的終止你的recv緩衝區? –
'(result> 0)? true:false'等於'result> 0'。 – molbdnilo
哦..不知道經過2年的編程 – daavid245