免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: xuyaosong
打印 上一主题 下一主题

[C] UDP丢包现象严重 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-01-20 23:56 |只看该作者
还是在你的机器上运行一个嗅探器看看吧。
话又说回来,如果你的程序对通讯有可靠性要求,还是用TCP吧,UDP不保险。
而且,路由器基本都禁止多播,你的程序适应性就受限制了。

论坛徽章:
0
12 [报告]
发表于 2010-01-21 00:21 |只看该作者
原帖由 xuyaosong 于 2010-1-20 22:55 发表
我还有一台计算机上面运行了UDP接收程序,是在Windows下的一个软件,在接收到UDP广播的数据后马上显示出来,能够看到显示的都是正确的

所以问题还是在我现在这台接收机上(运行的是Linux系统,自己编写的UDP ...


怀疑程序之前 , 你排除了其他影响因素了没有?
你认为一台发 , 另一台就一定能收到?
ping过了么?

论坛徽章:
0
13 [报告]
发表于 2010-01-21 08:17 |只看该作者
原帖由 xuyaosong 于 2010-1-20 11:08 发表
两台电脑,一台广播一台接收,发送方每秒钟发10次,每次几十个字节;接收方在收到数据后马上存储到文件中,然后继续接收。
运行时发现有严重的丢包现象,运行几分钟后,发送方存储的文件为86914字节,而接收方存储的文件为56184字节,查看文件内容后发现确实存在丢失现象,请问怎么能够缓解这种情况呢?
谢谢

仔细研究应用部署的网络环境
为什么要使用广播呢?接收端开一个UDP服务多好啊,发送端直接发送到指定的UDP端口的服务,这样你应用层还可以加入一些新的比如可靠性方面的特性。
如果一定要使用UDP,一般而言根据应用的要求,是需要在应用协议层适当地处理可靠性细节的。

论坛徽章:
0
14 [报告]
发表于 2010-01-21 10:21 |只看该作者
十分感谢各位老大的指教
用UDP是任务需要,将来我们在实际用的时候是若干台机器同时运行,互相之间会有数据共享,一台机器采集的数据需要供给其他几台使用。现在只是用两台做实验。

数据接收是没有问题的,因为我有一些传感器是每秒检测一次,这样UDP就每秒发送一次,此时接收方在收到数据后存储,没有发现丢包现象,而每秒钟10次的就会大量丢包。
现在的程序中所有数据都发到同一个端口上,接收方从该端口接收到数据后,再判断是哪个传感器的数据,然后分别存储。

现在我们想用的一个思路是:每个传感器检测数据都用一个线程,收到后进行UDP广播,在UDP发送的时候就各自指定不同的端口号,接收方可以根据自己的需要来设立多个线程,分别接收不同端口号上的数据。这样就能在接收方把接收工作分开,而不像前面在一个线程里面对所有数据接收。如此应该能够缓解一下丢包情况。
另外还有一个想法就是,在接收方,对从UDP上接收的每种传感器数据,都用两个线程来做,一个线程专门接收,收到后存储到一个缓冲区中,当缓冲区满了后,另一个线程就一次性取出后存储到文件中。这样似乎更能够避免丢包。

论坛徽章:
0
15 [报告]
发表于 2010-01-23 11:57 |只看该作者
应该不是网络的问题,可能代码处理上有问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP