因此,在寻找合适的库之后,我决定创建自己的库,并且这是其中的一部分。
try {
DatagramSocket serverSocket = new DatagramSocket(client_port);
byte[] receiveData = new byte[1024];
byte[] finalData;
while (true) {
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
erverSocket.receive(receivePacket);
if (this.address == receivePacket.getAddress() && this.server_port == receivePacket.getPort()) {
** handler.onMessage(receivePacket.getData()); **
}
}
} catch (IOException ex) {
Logger.getLogger(PacketHandler.class.getName()).log(Level.SEVERE, null, ex);
这段代码显然是异步运行的。
receiveData设置为1024,这非常浪费。这也意味着任何大于1024的内容都会被库激发成两个或多个“事件”。
我一直在想如何制作缓冲区,因为我已经完全空白了。本质上,您必须以某种方式计算字节数并将其推入新数组。
因此,我基本上是在寻求一种有效的方法,该方法不必包含代码。
最佳答案
您确定需要使用UDP吗?
似乎您应该将其更改为TCP实现。您要使用netty吗?请参见here。
1024字节是UDP datagaram的正常安全值,使其变大会带来路由器问题。 (请参见https://stackoverflow.com/a/13089776/3502543)。
如果您不想使用netty,则应提供类似于DelimiterBasedFrameDecoder的内容。
编辑。