因此,在寻找合适的库之后,我决定创建自己的库,并且这是其中的一部分。

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的内容。

编辑。

10-08 03:45