【问题标题】:Listening on UDP socket侦听 UDP 套接字
【发布时间】:2014-10-13 03:44:34
【问题描述】:

我正在使用此代码从 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 字节,这会导致 很多 开销。

有没有更好的方法来做到这一点?也许有某种 while() 读取周期?我对Java还不是很熟悉。 :)

【问题讨论】:

    标签: java sockets udp listen


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-09-03
      • 1970-01-01
      • 2014-10-28
      • 2011-12-10
      • 1970-01-01
      • 2012-09-06
      • 2016-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多