网上查了下,说把数据分成更小的包,然后一点点传过去。
但是我这样做了后,只能接收到前面8192字节的数据,不知道问题出在哪里?难道说那个buffer不会清空的?刚接触网络这块,不是很懂,请大虾赐教

解决方案 »

  1.   

    答:DatagramSocket的默认发送缓冲区大小是8192字节。当ds.send(UDP包)时,若UDP包长度大于默认大小,则:可能发送出去,也可能会被丢掉(或载断),具体情况由底层实现来决定。若要改变发送缓冲区大小,则:ds.setSendBufferSize(字节)即行。
    另:理论上:UDP包大小可达64k-UDP头长-IP包头长,但实际上,我们在写UDP程序时,不会定义这么大的UDP包,这是因为存在MTU的原因。而因特网的最小支持的MTU是576,因此,若UDP包太小,则每次数据有效传输效率低,若太大,由于MTU及UDP通信的性质,丢失的可能性加大。故:建议的UDP大小大约1k左右较好。
    以上仅供你参考
      

  2.   

    以太网EthernetII的MTU大部分不是1500字节吗
      

  3.   

    答:以太网的MTU是1500,但因特网上不仅是以太网。如:PPP拔号的MTU是296,因此规定:最小支持的MTU是576字节。
      

  4.   

    传输数据应该不会被buffer限制住
    如果你只收到了buffer大小的包,90%的可能是你的IO没有做flush动作,buffer写满,自动发送,但后面的没有写满,也没有flush,所以收不到try flush-----------------------------
    来上海吧
    http://topic.csdn.net/u/20080429/18/2ef7e7f7-7a00-4838-b4a7-ed8104b756ed.html
      

  5.   

    datagramsocket是套接字不是字节流,没有flush的
      

  6.   

    传输数据设置成1k了,sendbuffersize也改了,还是不行大家传输网络数据都是用什么方法的?
      

  7.   

    答:几乎可以肯定,程序中有BUG。把代码发上来就一目了然了。