【问题标题】:KXML2: Unexpected EOF after getting UDP-packetKXML2:获取 UDP 数据包后出现意外的 EOF
【发布时间】:2014-07-18 03:27:44
【问题描述】:

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

    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 的大小放在包的开头并提取数据,但这对我来说只是第二种方式。

【问题讨论】:

    标签: java sockets udp kxml2


    【解决方案1】:
    InputStream in = new ByteArrayInputStream(myPacket.getData());
    

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

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

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

    【讨论】:

    • 感谢您的回复。我根据自己的兴趣稍微更改了您的解决方案并且它有效。非常感谢!
    猜你喜欢
    • 2022-07-08
    • 1970-01-01
    • 2013-04-25
    • 2021-03-21
    • 2012-10-25
    • 2018-11-22
    • 1970-01-01
    相关资源
    最近更新 更多