日期:2014-05-20  浏览次数:20671 次

光天化日,跪求UDP丢包问题!散分,散分!!!
请各位大侠帮忙。小弟用UDP协议实现文件传输。
用JAVA代码编写,如何能保证传输的数据包百分之百正确且不丢失。
在局域网内传输文件,基本是不丢包的,但在外网上就会丢失,请各路神仙帮忙!!!十分感谢!!
求JAVA源代码~~~~~~~~~~~~~~~~~~~~~~!

------解决方案--------------------
不知所谓,udp丢包大家都知道,所以楼主才在问怎么解决啊。
如果能用tcp人家早用了,最无聊的莫过于没帮上忙瞎起哄的朋友了。

------解决方案--------------------
兄弟,,自己做个效验序列,和一个重传机制把,没什么的
到网上搜索一下,参考一下人家的代码,,很快就把代码码出来了
我支持你,,我公司就作过这种事,可惜不能给你源码呀
------解决方案--------------------
我个人认为即使你自己做个效验序列,和一个重传机制,同样不能保证百分百的正确传输,
着跟网络有很大的相关性,同时还涉及到网络安全问题,
------解决方案--------------------
发送前每一个包加一位序号 然后 先发送 所有序号初始化 然后 再按照序号发 丢失就发从发命令 就可以了 udp的丢包是完全丢掉 其实协议中也带一个校验位 这个校验位的作用的 当当前包少了数据的时候 完全丢掉当前包 因此不用考虑每一个包的数据丢失 只需要考虑丢了哪个包
------解决方案--------------------
分兩步來完成。

1. 自己定一個協議, 就是發送等到對方ACK ,再發下一個包。 這樣協議實現應該是很簡單的。
2. 再在上一步的基礎上實現滑動窗口協議。把滑動窗口固定定到 5-8 就OK了。

這些代碼都要自己去實現。別總想著有誰會給你。就算是有人給你,也很難說是實現能用的。

VC的話,有 UDT 開源庫。
------解决方案--------------------
UDP不可能不丢包的
还有,可以使用如下方法减少丢包率
1,尽量使单个的包的大小变小,最好是512字节以后,因为包越小,越不容易丢
2,自己为某一个包编一个序号,然后用强行回复机制,确保每个包都可以收到
以前写过类似的代码,也就是用UDP协议来传文件
------解决方案--------------------
同意楼上
我以前写的就是512
而且还有ACK信息
这样才能保证不丢包
但是重传需要好好考虑一下
用线程是肯定的
但是要写好这个线程不容易
------解决方案--------------------
我很理解你,我现在开发的设备就是这样的,我也是采用的UDP传输文件,给你说一个沮丧的结论,
UDP传输因为它是无效验机制的,在理论上就是没有办法到100%正确的,只能尽量提高正确率。
我们之所以用UDP,是因为我们的设备硬件上就是无反馈的,所以象TCP这种三次握手都不能完成
最后,提高正确率的方法,我目前用的是重传机制