关于Java网络通信_UDP的几个问题

UDP发送端:

DatagramPacket dp=new DatagramPacket(buf, length, address, port);

其中,buf指所需要发送的数据,length指的是包的长度(官方文挡解释)。
问题1:若buf长度为很大,远大于length,那么上面的语句是将数据打包成一个数据丢失的数据包还是多个长度为length的数据包?


UDP接收端:

DatagramSocket ds=new DatagramSocket(10086);

byte[] buf=new byte[1024];

int length=buf.length;

DatagramPacket p=new DatagramPacket(buf, length);

ds.receive(p);

问题2:DatagramPacket用来接收长度为length的数据包,若发送端数据包长度为1024,接收端在此的length设为100,数据是否会丢失?

问题3:receive(p)方法到底接收的是一个包还是所有的包?

第一个问题,不会,因为它会分包发送的;第二个问题,也不会,接收端缓存只有100 就只能收到 100 的数据,其他数据还在 Socket 的缓冲区中。
如果不读取到内存中处理,只能说明代码写的有问题。如果缓冲区 定义为 100 ,应该循环读取到内存中,知道 Socket 中没有数据为止。

并不是说内存缓冲区定义为 100 ,就只读取一次,应该分多次读取才对。