请问各位大虾,有两个关于DatagramPacket的小问题请教:
1、在创建用于发送的数据报时:DatagramPacket packet = new DatagramPacket(byte[ ] buf, int length, InetAddress address, int port);其中的length指的是数据报中数据的长度还是整个数据报的长度啊?官方帮助上写的是“包长度”,有的文档上写的是“数据报中数据的长度”。
2、在创建用于接收的数据报时:DatagramPacket packet = new DatagramPacket(byte[ ] buf, int length);其中的参数length如何理解啊?官方帮助上写的是“要读取的字节数”,这句话不是太理解,是不是指的从buf数组的第一个元素开始读取的字节总数啊,如果指定的字节数和发送方发送过来的数据报中数据的实际长度不一样会怎样呢?请赐教!
1、在创建用于发送的数据报时:DatagramPacket packet = new DatagramPacket(byte[ ] buf, int length, InetAddress address, int port);其中的length指的是数据报中数据的长度还是整个数据报的长度啊?官方帮助上写的是“包长度”,有的文档上写的是“数据报中数据的长度”。
2、在创建用于接收的数据报时:DatagramPacket packet = new DatagramPacket(byte[ ] buf, int length);其中的参数length如何理解啊?官方帮助上写的是“要读取的字节数”,这句话不是太理解,是不是指的从buf数组的第一个元素开始读取的字节总数啊,如果指定的字节数和发送方发送过来的数据报中数据的实际长度不一样会怎样呢?请赐教!
第二个问题,你既然要接受,那么你就应该告诉底层,你存储数据的大小,所以还是buf的大小。
/**
* Constructs a datagram packet for sending packets of length
* <code>length</code> to the specified port number on the specified
* host. The <code>length</code> argument must be less than or equal
* to <code>buf.length</code>.
*
* @param buf the packet data.
* @param length the packet length.
* @param address the destination address.
* @param port the destination port number.
* @see java.net.InetAddress
*/
public DatagramPacket(byte buf[], int length,
InetAddress address, int port) {
this(buf, 0, length, address, port);
}
第二个问题:
/**
* Constructs a <code>DatagramPacket</code> for receiving packets of
* length <code>length</code>.
* <p>
* The <code>length</code> argument must be less than or equal to
* <code>buf.length</code>.
*
* @param buf buffer for holding the incoming datagram.
* @param length the number of bytes to read.
*/
public DatagramPacket(byte buf[], int length) {
this (buf, 0, length);
}