我有一个PC程序通过UDP从20个自定义硬件盒接收数据。这些盒子中的每一个都不断地将UDP消息发送到PC上的单个UDP套接字。这些消息都包含10到150个字节的数据,每个单元在12秒内发送大约20条消息。
测试表明PC错过了一些消息。网络上的盒子越少,错过的消息就越少。
长期解决方案是缓冲硬件中的数据,让PC通过TCP检索数据,但我需要在短期内解决/最小化丢失的消息问题,直到可以部署该解决方案。想法包括: - 升级PC - 在传输之前过滤掉不必要的消息 - 将硬件中的单独UDP消息组合成一个更大的UDP消息 - 在PC中使用多个插槽接收消息
我正在寻找有关这些想法的反馈,以及我们可能错过的任何想法。
接收程序是运行Indy9的C ++ Builder程序。
答案 0 :(得分:1)
UDP中丢弃的消息与网络上的NET拥塞有关。如果您使用1个或5个套接字来接收包裹,则无需执行任何操作。
此外,如果您只有20个盒子,则在12秒内发送20条消息。这意味着每秒只有33条消息。对于网络和处理器来说,这真的是花生......
因此,删除软件包的唯一原因是还有很多其他网络负载正在进行中。网卡和路由器倾向于选择udp以上的tcp-ip包。
如果没有过多的网络负载,则不应删除UDP包。
答案 1 :(得分:1)
最可能的问题出在网络上。
你已经说过网络是专用局域网,它消除了我的一个建议,另一个是确保网络切换 - 集线器很容易丢失数据包。
如果这没有帮助,那么您可以尝试增加PC上的接收缓冲区大小。 http://www.developerweb.net/forum/showthread.php?t=5773
答案 2 :(得分:0)
感谢其他人提出的建议,但对于任何人来说,这里的解决方案是用正确的规格机器(2GHz Core 2处理器和2GB RAM)替换已经使用过的旧PC(1.6GHz Celeron和512MB RAM) )。