java中如何判断udp报文的完整性

2024-12-02 14:13:06
推荐回答(2个)
回答1:

UDP报文的完整性,不是JAVA语言本身能够保证的,主要还是靠网络通信协议。一般来说1500个字节应该不会出现在网络中只传输一部分过来的情况,因为1500个字节还在一个UDP包的范围内,因此会一次性发送的。但是,根据经验,超过1K的udp报文,丢包率通常是比较高的。当然,局域网环境下这个丢包率会小很多。

另外还有一个问题,你的消息接收的缓冲区要足够大,如果你的缓冲区只有1000个字节的话,那么100%你收不到一个完整的包。所以,设置合理的缓冲区也是必要的。

回答2:

byte[] b = new byte[1024]; int len = 输入流.read(b)://从输入流中读取数据装填到数组b中,len保存的是读到的有效字节数 while( len != - 1 ){ //为-1表示没有数据可读 String str = new String(b, 0, len); //把装数字的数组中本次读到的数据new成string 或者 输出流.write( b, 0, len); //向输出流中写len个字节数据。剩下的你不用管它。 } 记住,len记录了每次读到的有效字节个数,如果接收的只有16个,那么你只用取16个拿出来用,就是准确的数据。