我正在尝试使用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();
(对不起,语法很棒,我是德国人)
答案 0 :(得分:0)
您的write()
方法调用假定整个缓冲区已被receive().
填充您必须使用DatagramPacket:
提供的长度
datagramSocket.receive(packet);
stream.write(packet.getData(), packet.getOffset(), packet.getLength());
如果数据包中有开销,例如应该有一个序列号,你需要相应地调整偏移量和长度。
NB TCP将确保“一切都被转移并且没有被破坏”。