我编写的小程序接收UDP数据包并将其数据保存到文件中。
MulticastSocket socket = getMulticastSocket(interfaceAddress, multicastAddress, port);
FileOutputStream fos = null;
try{
fos = new FileOutputStream(fileName);
while(true) {
byte[] data = new byte[BUFFER_SIZE];
byte[] lengthBytes = new byte[4];
DatagramPacket packet = new DatagramPacket(data, 0, data.length);
socket.receive(packet);
int length = packet.getLength();
ByteBuffer lengthBB = ByteBuffer.wrap(lengthBytes);
lengthBB.putInt(length);
fos.write(lengthBB.array());
fos.flush();
fos.write(data, 0, length);
fos.flush();
}
}
之后我尝试阅读它使用以下代码
final FileInputStream inputStream = new FileInputStream(fileName);
byte[] length = new byte[4];
while (inputStream.read(length) != -1){
int receivedLength = ByteBuffer.wrap(length).getInt();
byte[] body = new byte[receivedLength];
inputStream.read(body);
// doing something with body
length = new byte[4];
}
它通常有效但在文件中间我在receiveLength变量中得到负值(-2147483648和[-128,0,0,0]在字节表示中)。
BUFFER_SIZE = 10240但我不认为该包大于此值。
问题:为什么会这样?
P.S。我没有访问写入文件的机器,我无法查看网络流。我只有文件。
答案 0 :(得分:0)
UDP消息的最大大小为64K。你说你不认为这个数据包大于10240但它可能是。尝试将缓冲区增加到64 * 1024,看看是否会改变结果。