Java通过UDP传输文件。压缩文件已损坏?

时间:2013-12-09 03:18:17

标签: java file networking udp file-transfer

我正在尝试使用Java中的DatagrammSocket传输文件。我正在将这些文件读成4096字节的文件。我们正在使用ACK,所以所有部分都是正确的顺序,我们尝试了pdf,exe,jpg和更多的东西成功,但iso,zip和7z不起作用。之后它们的大小完全相同。你有什么想法吗?

阅读零件:

byte[] b = new byte[FileTransferClient.PACKAGE_SIZE - 32];
FileInputStream read = new FileInputStream(file);
read.skip((part - 1) * (FileTransferClient.PACKAGE_SIZE - 32));
read.read(b);
content = b;

编写零件​​:

stream = new FileOutputStream(new File(this.filePath));
stream.write(output);
...
stream.write(output);
stream.close();

(对不起,语法很棒,我是德国人)

1 个答案:

答案 0 :(得分:0)

您的write()方法调用假定整个缓冲区已被receive().填充您必须使用DatagramPacket:提供的长度

datagramSocket.receive(packet);
stream.write(packet.getData(), packet.getOffset(), packet.getLength());

如果数据包中有开销,例如应该有一个序列号,你需要相应地调整偏移量和长度。

NB TCP将确保“一切都被转移并且没有被破坏”。