我有一個UDP客戶端以指定的速率向服務器發送消息。費率需要保持不變,所以我決定嘗試在單獨的線索中收到回覆,以避免阻止或延遲recvfrom()
。在收到信息之前是否可以「等待」完整信息?要做到這一點,最好的策略是什麼?Recvfrom:等待完整的消息(可變大小的消息,線程)
while (true)
{
//std::this_thread::sleep_for(std::chrono::milliseconds(5000));
if (recvfrom(threadSock, ReceiveBuf, BufLength, 0, 0, 0) == SOCKET_ERROR)
{
printf("Thread Receive failed with error %ld\n", GetLastError());
break;
}
else
{
printf("Reply received: %s\n\n", ReceiveBuf);
}
memset(ReceiveBuf, '\0', BufLength);
}
上面是我的接收代碼。目前,只有回覆的前8個字符被讀入緩衝區(緩衝區是512字節)。
如何等待完整的消息(記住消息長度是可變的)。
這甚至可能嗎?也許有更好的方法。
在此先感謝。
編輯:我應該澄清的打印僅用於測試。他們不會在最終的結果,因爲從線程打印給出奇怪的內聯打印。
你怎麼知道你只有8個字節?您不評估收到的字節數。 – 2017-10-18 09:48:43
斷點:)這一切都是WIP –
這不太可能只有8個字節,如果發送更多iif。 – 2017-10-18 09:52:36