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

解决方案 »

  1.   

    UDP本来就是可能丢包的,想不丢用TCP啊。
      

  2.   

    如果你在UDP上加上校验和序列号,那基本上就又实现了一下TCP了。
      

  3.   

    用TCP吧,要不UDP之上再自己加上握手检测。
      

  4.   

    udp想不丢都难.....不过这要看,网络情况,文件大小等因素..
    如果想不丢,那就用tcp
      

  5.   

    udp在内网还行在外网就不怎么了!
      

  6.   

    如果不想丢包的话,还是用TCP吧
      

  7.   

    恩,TCP吧...本身UDP的协议特点就是只重速度,不重数据的完整性
      

  8.   

    文件传输,建议放弃UDP使用TCP
      

  9.   

    不用 tcp 算是白瞎了..
      

  10.   

    我靠 ,udp 穿透 NAT 方便啊,楼上的你有本事搞个TCP 穿透NAT的. 我给你500分!!!
    不是要强烈结贴吗? 快贴代码吧! 等你
    最好能给出用JAVA写的UDP停等协议滑动窗口协议的代码. 谢谢!
      

  11.   

    ............
    500分换个UDP的滑动窗口实现穿透NAT很值
    我再可以赞助200分以了我去年没实现的残念
      

  12.   

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

  13.   

    你如果在外网上确实想还是用udp的话,建议你自己写校验吧…………非常麻烦…………
      

  14.   

    等着看结果。想帮忙也帮不上了,udp丢包太正常了。
      

  15.   

    UDP丢包很正常嘛,一个不丢倒有点意外了。
      

  16.   

    有个基于UDP的UDT
    http://udt.sourceforge.net/
      

  17.   

    发送前每一个包加一位序号 然后 先发送 所有序号初始化 然后 再按照序号发  丢失就发从发命令 就可以了  udp的丢包是完全丢掉 其实协议中也带一个校验位 这个校验位的作用的 当当前包少了数据的时候 完全丢掉当前包  因此不用考虑每一个包的数据丢失  只需要考虑丢了哪个包
      

  18.   

    分兩步來完成。1. 自己定一個協議, 就是發送等到對方ACK ,再發下一個包。 這樣協議實現應該是很簡單的。
    2. 再在上一步的基礎上實現滑動窗口協議。把滑動窗口固定定到 5-8 就OK了。這些代碼都要自己去實現。別總想著有誰會給你。就算是有人給你,也很難說是實現能用的。VC的話,有 UDT 開源庫。
      

  19.   

    UDP不可能不丢包的
    还有,可以使用如下方法减少丢包率
    1,尽量使单个的包的大小变小,最好是512字节以后,因为包越小,越不容易丢
    2,自己为某一个包编一个序号,然后用强行回复机制,确保每个包都可以收到
    以前写过类似的代码,也就是用UDP协议来传文件
      

  20.   

    同意楼上
    我以前写的就是512
    而且还有ACK信息
    这样才能保证不丢包
    但是重传需要好好考虑一下
    用线程是肯定的
    但是要写好这个线程不容易
      

  21.   

    我很理解你,我现在开发的设备就是这样的,我也是采用的UDP传输文件,给你说一个沮丧的结论,
    UDP传输因为它是无效验机制的,在理论上就是没有办法到100%正确的,只能尽量提高正确率。
    我们之所以用UDP,是因为我们的设备硬件上就是无反馈的,所以象TCP这种三次握手都不能完成
    最后,提高正确率的方法,我目前用的是重传机制
      

  22.   

    哥哥我也在用UDP,而且只能UDP,谁能给个万全之策?跪求