2014-07-17 38 views
0

我正在处理UDP并发送一些消息。 一条消息包含二进制XML,我正在使用KXML2和以下code。它运行良好。 在UDP上,我必须在DatagramPacket上占用固定的缓冲区。使用从DatagramPacket中取出的这个字节数组并运行我的KXML2函数,每次都会触发一个“Unexpected EOF”异常。KXML2:得到UDP包后意外的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的大小放在包的开始处并提取数据,但这仅仅是我的第二种方式。

回答

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

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

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

但我担心,要么你还没有发射的整个数据,或者您构建接收DatagramPacket类的字节数组太短。

+0

谢谢您的回复。我改变你的解决方案有点符合我的兴趣和它的作品。非常感谢! – user3417078