改进UDP消息处理

时间:2009-08-21 11:46:44

标签: windows tcp indy

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

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

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

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

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

3 个答案:

答案 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) )。