接收DatagramPacket

时间:2013-03-01 18:46:10

标签: java udp datagram

DatagramPacket类中,所有构造函数都需要一个int参数作为“length”。 当我尝试接收它时,为什么需要设置DatagramPacket的长度,因为我不一定知道数据包有多长? 我应该将它设置为哪个数字?

编辑: 让我改变我的问题:

如果DatagramSocket.receive方法有签名

public DatagramPacket receive() {};

而不是

public void receive(Datagrampacket p) {};

不是更有意义吗?如上所述,接收器通常不知道数据包是什么样的。

由于传递服务类比通常应用于UDP,所以我们说:

DatagramSocket就像一个邮箱。 DatagramPacket就像包裹信封一样。 DatagramPacket.data是信封内的内容。对于送货服务,接收器提供邮箱而不是信封。

1 个答案:

答案 0 :(得分:1)

好吧,你要求它写入一个你提供的字节数组。因此,请确保您的字节数组与您希望处理的最大数据包一样大,并传入length参数的数组长度。

编辑:对于编辑过的问题,该API意味着接收代码每次都必须创建一个新的缓冲区。使用现有的API,相同的字节数组可用于多个调用,因为调用者可以决定何时使用它。

现在可以肯定的是,这样的过载是有道理的:

public DatagramPacket(byte[] buffer)
{
    this(buffer, buffer.length);
}

......但那是另一回事。