开发者

Listening on UDP socket

开发者 https://www.devze.com 2023-01-08 03:58 出处:网络
I am using this code to receive data from a UDP socket and return it as string: byte[] receiveData = new byte[MAX_PACKET_SIZE];

I am using this code to receive data from a UDP socket and return it as string:

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());

I set MAX_PACKET_SIZE to 1024 which causes Java to reserve a 1024bit long byte[] everytime a packet arrives. This causes a lot of overhead if the packet is much smaller than 1024 byte.

Is there a better way to accomplish this? Maybe with some kind of while() read cycle? I am not开发者_开发问答 very familiar with Java yet. :)


You can reuse the packet if you want to avoid the overhead of creating mutliple arrays (although short-lived objects actually have very little impact on performance anyway).

Note that you can't read a UDP datagram in chunks, as anything beyond the end of the DatagramPacket you pass to receive is discarded.

Edit - I checked, and DatagramChannel.receive is pretty much the same. You really do need to ensure that your buffer is big enough to receive the largest possible valid datagram.

0

精彩评论

暂无评论...
验证码 换一张
取 消