想实现组播发送,发送和接收的代码都写好了。先在局域网里的两三台电脑上试了一下,发现如果发的文件大于16KB左右,收端就收不到文件了。而文件的发送间隔也只能在10毫秒左右,发送间隔再小的话收端就会有丢包。
因为传送的文件比较多,所以想让发送速率更快,于是想到用多端口发送。但是实现后,发现在收端开两个线程分别调用MulticastSocket类的receive方法,如果发送400多个包,一个线程能收到一百多个包,另一个线程只能接收三十多个包。考虑到receive方法本身是阻塞函数,因此没有做线程同步。请大虾们帮忙分析下原因吧

解决方案 »

  1.   

    MulticastSocket 所发送的包大小有限制,太大的必须自己分包而且MulticastSocket也不能保证正确的送达,因为它不需要对方响应的。
    如果你需要传输文件,最好的方式当然是TCP,也就是Socket。这个才是稳定连接的首选,如果你一定要使用UDP、MulticastSocket这类,你必须自己手工实现收包后发送响应。如果服务器没有收到响应,则需要重发包
    具体实现会相当复杂
      

  2.   

    对,您说的稳定这个因素我已经考虑到了。但是可以在哪里查到MulticastSocket类所发送的包大小限制呢?我在网上查不到,只能实际试验得出个大概值。
      

  3.   

    我写了个检测最大可用传输单元(MTU)的工具
    系统默认的一般是1500
    一般还要减去ip的报头20,udp的报头8 
    windows下一般是1492, linux下是1472字节http://download.csdn.net/source/1036487
      

  4.   

    更正
    不是windows下一般是1492,而是测本机的是1492
    我也不知道什么原因,也许是没有走ip,所以没有算上ip报头的20个字节
    所以实际中应该是1472字节