0

我正在处理 UDP 并发送一些消息。一条消息包含二进制 XML,我正在使用带有以下代码的 KXML2 。它运行良好。在 UDP 上,我必须在 DatagramPacket 处获取一个固定缓冲区。使用从 DatagramPacket 获取的这个字节数组并运行我的 KXML2 函数,每次出现“意外 EOF”异常时都会触发。

    myPacket = new DatagramPacket( new byte[1024], 1024);
    InputStream in = new ByteArrayInputStream(myPacket.getData());
    WbxmlParser parser = new WbxmlParser();
    parser.setInput(in, "UTF-8");
    org.kxml2.kdom.Document dom = new org.kxml2.kdom.Document();
    dom.parse(parser);

在 'dom.parse(parser);' 处引发异常 任何想法,正确的 EOF 看起来如何?也许可以将二进制 xml blob 的大小放在包的开头并提取数据,但这对我来说只是第二种方式。

4

1 回答 1

0
InputStream in = new ByteArrayInputStream(myPacket.getData());

您忽略了数据包的实际长度。它应该是:

    InputStream in = new ByteArrayInputStream(myPacket.getData(), myPacket.getOffset(), myPacket.getLength());

但我担心要么您没有传输整个数据,要么您构造接收 DatagramPacket 的字节数组太短。

于 2014-07-17T18:50:48.190 回答