1

我有一个 PC 程序通过 UDP 从 20 个自定义硬件盒接收数据。这些盒子中的每一个都不断地向 PC 上的单个 UDP 套接字发送 UDP 消息。这些消息都包含 10 - 150 字节的数据,每个单元在 12 秒内发送大约 20 条消息。

测试表明 PC 遗漏了一些消息。网络上的盒子越少,错过的消息就越少。

长期的解决方案是在硬件中缓冲数据,并让 PC 根据需要通过 TCP 检索数据,但我需要在短期内解决/最小化丢失消息的问题,直到可以部署该解决方案。想法包括: - 升级 PC - 在传输之前过滤掉不必要的消息 - 将硬件中单独的 UDP 消息组合成一个更大的消息 - 在 PC 中使用多个套接字来接收消息

我正在寻找有关这些想法的反馈,以及我们可能错过的任何反馈。

接收程序是一个运行 Indy9 的 C++Builder 程序。

4

3 回答 3

1

UDP 中丢弃的消息与网络上的 NET 拥塞有关。如果您使用 1 或 5 个插座接收包裹,则无关紧要。

另外,如果你只有 20 个盒子,在 12 秒内发送 20 条消息。这意味着每秒只有 33 条消息。这真的是小菜一碟……对于网络以及处理器而言。

所以,包被丢弃的唯一原因是还有很多其他的网络负载在进行。网卡和路由器倾向于比 udp 更喜欢 tcp-ip 包。

如果没有过多的网络负载,则不应丢弃 UDP 包。

于 2009-08-21T11:53:03.457 回答
1

最有可能的问题出在网络上。

您已经说过网络是私有 LAN,这消除了我的一个建议,另一个是确保网络已切换 - 集线器很容易丢失数据包。

如果这没有帮助,那么您可以尝试增加 PC 上的接收缓冲区大小。 http://www.developerweb.net/forum/showthread.php?t=5773

于 2009-08-21T12:16:13.347 回答
0

感谢其他人的建议,但对于任何回过头来的人,这里的解决方案是用正确的规格机器(2GHz Core 2 处理器和 2GB RAM)替换已使用的旧 PC(1.6GHz Celeron 和 512MB RAM)。

于 2009-08-25T12:11:35.557 回答