想实现组播发送,发送和接收的代码都写好了。先在局域网里的两三台电脑上试了一下,发现如果发的文件大于16KB左右,收端就收不到文件了。而文件的发送间隔也只能在10毫秒左右,发送间隔再小的话收端就会有丢包。
因为传送的文件比较多,所以想让发送速率更快,于是想到用多端口发送。但是实现后,发现在收端开两个线程分别调用MulticastSocket类的receive方法,如果发送400多个包,一个线程能收到一百多个包,另一个线程只能接收三十多个包。考虑到receive方法本身是阻塞函数,因此没有做线程同步。请大虾们帮忙分析下原因吧
因为传送的文件比较多,所以想让发送速率更快,于是想到用多端口发送。但是实现后,发现在收端开两个线程分别调用MulticastSocket类的receive方法,如果发送400多个包,一个线程能收到一百多个包,另一个线程只能接收三十多个包。考虑到receive方法本身是阻塞函数,因此没有做线程同步。请大虾们帮忙分析下原因吧
如果你需要传输文件,最好的方式当然是TCP,也就是Socket。这个才是稳定连接的首选,如果你一定要使用UDP、MulticastSocket这类,你必须自己手工实现收包后发送响应。如果服务器没有收到响应,则需要重发包
具体实现会相当复杂
系统默认的一般是1500
一般还要减去ip的报头20,udp的报头8
windows下一般是1492, linux下是1472字节http://download.csdn.net/source/1036487
不是windows下一般是1492,而是测本机的是1492
我也不知道什么原因,也许是没有走ip,所以没有算上ip报头的20个字节
所以实际中应该是1472字节