本帖最后由 aisq2008 于 2014-08-18 10:55:12 编辑

解决方案 »

  1.   

    UDP不太靠谱,你得用一些额外的手段来保证其完整性
      

  2.   


    不会发生你说的这种情况 。但建议你不要超过1400byte,超过的话,还是尽量用TCP
      

  3.   

    UDP报文的完整性,不是JAVA语言本身能够保证的,主要还是靠网络通信协议。一般来说1500个字节应该不会出现在网络中只传输一部分过来的情况,因为1500个字节还在一个UDP包的范围内,因此会一次性发送的。但是,根据经验,超过1K的udp报文,丢包率通常是比较高的。当然,局域网环境下这个丢包率会小很多。另外还有一个问题,你的消息接收的缓冲区要足够大,如果你的缓冲区只有1000个字节的话,那么100%你收不到一个完整的包。所以,设置合理的缓冲区也是必要的。总之,通常情况下1500个字节的UDP包,要么能收到,要么收不到,应该不会出现只收到部分的问题。
      

  4.   

    楼上正确。
    如果确定UDP是单包发送,那要么收不到,要收到就全收到。但LINUX有设置单包UDP大小,如果超过单包范围,则会自动转成两个包发送,那样就收不全了。
      

  5.   

    1500byte<=2Kb,数据量不大,没啥好担心的注意的是你用的Java老的socket编程,报文接收是阻塞式的,没收到的话会一直等下去建议使用Java NIO编程,Serversocket accept后立即返回,你程序里判断是否接收到数据即可,不用阻塞线程