听UDP套接字

时间:2010-07-22 10:01:15

标签: java sockets udp listen

我正在使用此代码从UDP套接字接收数据并将其作为字符串返回:

byte[] receiveData = new byte[MAX_PACKET_SIZE];
DatagramPacket receivedPacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivedPacket);
return new String(receivedPacket.getData(), 0, receivedPacket.getLength());

我将MAX_PACKET_SIZE设置为1024,这使得Java每次数据包到达时都会保留1024位长字节[]。如果数据包远小于1024字节,这会导致 lot 的开销。

有没有更好的方法来实现这一目标?也许有某种while()读周期?我还不熟悉Java。 :)

1 个答案:

答案 0 :(得分:1)

如果你想避免创建多个数组的开销,你可以重用数据包(尽管短期对象实际上对性能的影响非常小)。

请注意,您无法以块的形式读取UDP数据报,因为您传递给receive的DatagramPacket末尾之外的任何内容都将被丢弃。

编辑 - 我查了一下,DatagramChannel.receive几乎一样。您确实需要确保缓冲区足够大,以便能够接收尽可能大的有效数据报。