我有一个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