【发布时间】:2014-04-22 18:35:45
【问题描述】:
我正在使用DatagramSocket 来接收DatagramPacket,就像s.receive(p) 一样,我正在循环执行此操作。然而,我发现了两种意想不到的行为。
1) getData()(typo was getBytes) 总是返回 500 个字节(我设置的字节缓冲区),即使数据包可能只包含 10 或 20 个字节。我应该修剪这个还是有更清洁的方法来处理这个?
真正的问题...
2) getLength() 总是为每个新数据包更新,但 getBytes() 仅在下一个数据包大于前一个数据包时更新...这是 DatagramPacket 类中的故障还是某人的某些功能愿意向我解释...?
我现在能想到的唯一解决方案是为每个接收创建一个新的DatagramPacket,但为什么它会更新Length而不是Bytes(除非它在更大时更新字节比上一个数据包)?
编辑:我似乎已经解决了这个问题,下面是我根据请求自动更新数据包的代码...
s= new DatagramSocket(port, InetAddress.getByName("0.0.0.0"));
p= new DatagramPacket(new byte[500], 500);
然后我在下面循环这段代码
s.receive(p);
System.out.println("Port: " + p.getPort() + "\nLength: " + p.getLength() + "\nReceived: " + new String(p.getData(), p.getOffset(), p.getLength()) + "\n from: " + p.getAddress().toString());
【问题讨论】:
标签: java networking