DatagramPacket的两个小疑问

yangaocheng 2010-04-13 02:01:01
请问各位大虾,有两个关于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数组的第一个元素开始读取的字节总数啊,如果指定的字节数和发送方发送过来的数据报中数据的实际长度不一样会怎样呢?请赐教!
...全文
81 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
java_zhengjd 2010-04-14
  • 打赏
  • 举报
回复
#1正确。都是BUF的长度
wanyyl2353406 2010-04-13
  • 打赏
  • 举报
回复
Z这是无连接的数据报方式,当放送包时指的当然是包的长度,接收是指的是接收所需要 的长度了
James.Ji 2010-04-13
  • 打赏
  • 举报
回复
第一个问题:
/**
* 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);
}
James.Ji 2010-04-13
  • 打赏
  • 举报
回复
仔细考虑考虑,自己就能得出结果,首先你发送数据,你必然要告诉底层你要发送的byte数组的大小,所以第一个是buf的长度。
第二个问题,你既然要接受,那么你就应该告诉底层,你存储数据的大小,所以还是buf的大小。

62,630

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧