2013-12-09 247 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將確保'所有東西都被轉移並且沒有損壞'。