gpt4 book ai didi

c++将udp数据流式传输到队列中?

转载 作者:行者123 更新时间:2023-11-28 05:25:27 28 4
gpt4 key购买 nike

我将数据作为字符串通过 UDP 流式传输到虚幻引擎中的 Socket 类中。这是线程化的,并在后台运行。

我的阅读功能是:

float translate;
void FdataThread::ReceiveUDP()
{

uint32 Size;
TArray<uint8> ReceivedData;

if (ReceiverSocket->HasPendingData(Size))
{
int32 Read = 0;
ReceivedData.SetNumUninitialized(FMath::Min(Size, 65507u));
ReceiverSocket->RecvFrom(ReceivedData.GetData(), ReceivedData.Num(), Read, *targetAddr);
}

FString str = FString(bytesRead, UTF8_TO_TCHAR((const UTF8CHAR *)ReceivedData));
translate = FCString::Atof(*str);

}

然后我在 Tick 或计时器上从另一个类调用 translate 变量。

我的测试用例从另一个应用程序发送一个递增的数字。

如果我从上面的 Read 函数中打印这个数字,它看起来像预期的那样,递增计数。当我从另一个线程打印它时,它缺少一些数字。

我相信这是因为我在 Tick 上调用它,所以它由于处理时间而遗漏了一些数据。

我的问题是:

有没有办法对传入的数据进行排队,以便当我提取值时,它是下一个增量值而不是当前值?解决此问题的最佳方法是什么?

谢谢,如果我没说清楚,请告诉我。

最佳答案

这是完整的代码吗? ReceivedData 在用来自套接字的数据填充后不会被使用。相反,正在使用(在此代码中) undefined variable “缓冲区”。

此外,while 循环似乎可以运行多次,覆盖 ReceivedData 缓冲区中的旧数据。添加一些调试消息以查看 RecvFrom 是否实际从套接字读取所有字节。我相信它只读取一个“数据包”。

最后,特别是当您在网络上使用 UDP 套接字时,请注意 UDP 协议(protocol)不能保证实际传送其数据包。但是,如果您在单台计算机或本地网络上使用它,我怀疑这会导致您的问题。

关于c++将udp数据流式传输到队列中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40641591/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com