我写了一个可靠udp传输类,测试时发现如果发送的太快接收端就容易收不到一些包,我设置10ms发送一个文件块,我后面设置成100就可以了,但这样的传输速度很慢!有其它办法吗?我用的是阻塞socket

解决方案 »

  1.   

    UDP是不可靠,无连接传输层协议,所以丢包是很有可能的,即使设置100ms也无法保证不丢包。可以考虑TCP传输
    如果一定要UDP,可以考虑自己实现一个滑动窗口机制。
      

  2.   

    支持2楼的看法,先用 TCP 传输吧,简单点。
      

  3.   

    UDP是不可靠连接
    包的大小、发送频率、缓冲区设置都很关键
    建议去看一下TCP\IP卷中,对TCP、UDP发送、接收的描述
      

  4.   

    同楼上一起问你:你是如何实现UDP可靠的?
      

  5.   

    我是看了TCP的相关内容来实现的,加入慢启动和拥塞控制,超时重传等
      

  6.   

    阻塞socket改成非阻塞的试试。
      

  7.   

    你仔细看看TCP里的一些算法:慢启动,快速重传,滑动窗口,Nagle算法等。
    不知,你在LAN里测试,能到达什么样的发送速率?多少KBps?
      

  8.   

    我在lan里测试的是11mBps,我还在不断完善中。可以一起切磋一下。有一网友做的更好,基本上可以说是完美。比tcp要快多了。
      

  9.   

    要实现快速传输,首先要设法充分利用各种资源,主要是网络资源,尽量不让网络空闲;其次是要尽可能避免执行重复的操作。
    如果按照TCP的方式来实现“可靠UDP”,就跟TCP差不多了,不能体现出UDP的优势,还不如直接用TCP方便。
      

  10.   

    在局域网上下用udp传文件,做的好,要比tcp至少快一倍。特别是双向传输的时候。楼上如果想交流一下,可加我的msn.
    我已经在消息中告诉你我的msn.
      

  11.   

    To LS:
    我一般不用私聊的方式交流,在帖子中回复就可以了。
    UDP是可以比TCP快,我上面回复的意思是建议LZ不要用UDP来模拟TCP。顺便提一下,用UDP要稍稍复杂一些,如果设计不好,也有可能不如TCP快,如果对速度要求不是很高,可以考虑用TCP多连接的方式来传输文件,速度方面感觉与UDP差距不大,可能需要CPU与内存资源要多一些。
      

  12.   

    to ls
    确实用udp模拟tcp比较复杂,而且效果不一定好。
      

  13.   

    可靠UDP是用来进行事务处理比如登陆、聊天等功能的。发送大量的数据比如文件还是用TCP好了。
      

  14.   

    我在lan里测试的是11mBps,我还在不断完善中。可以一起切磋一下。 
    有点慢,呵呵。
      

  15.   

    100Mbps的局域网最高理论速度也就是12.5MB/s。飞鸽传书速度为11.5MB/s左右,而且用的是TCP.
    用UDP能提升的空间很小啊。我用 Winsocket+TCP+单线程+同步 只能到10.5左右,郁闷了很久...
      

  16.   

    我用UDP主要是P2P,不然也不会用UDP。
    楼上!你也是可靠的UDP吗?能讲一下你的思路?
      

  17.   

    wwwllg 你的速度达到11MB/s有用多线程传输吗?还是就一个线程发送?
      

  18.   

    楼主可以和我讨论一下,我正在研究这个,也在写这个算法。
    我的msn, [email protected]
      

  19.   

    to ls
    已经加你了,你一般什么时候在线?