2013-12-09 244 views
0

我想用Java中的DatagrammSocket传输文件。我正在将这些文件读入4096字节。我们正在使用ACK,所以所有的作品都按照正确的顺序排列,我们尝试了pdf,exe,jpg以及更多的东西,但是iso,zip和7z都不起作用。之后他们的尺寸完全一样。你有什么主意吗?通过UDP传输Java文件。压缩文件已损坏?

读配件:

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(); 

(对不起伟大的语法,我是德国人)

+2

不保证UDP传输。你应该为此使用TCP。 – 2013-12-09 03:23:37

+0

我必须使用UDP,我有我自己的协议,以确保一切都得到转移,并没有损坏。因此逐字节是相同的... – LittelTeddy

+0

您尚未发布所有相关代码。 “内容”如何上网?以及'输出'是如何形成的? – EJP

回答

0

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

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

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

NB TCP将确保'所有东西都被转移并且没有损坏'。