2013-12-09 1 views
0

Я пытаюсь передать файлы с DatagrammSocket в Java. Я читаю файлы в 4096 байт. Мы используем ACK, поэтому все части находятся в правильном порядке, мы пытались использовать pdf, exe, jpg и многое другое, но iso, zip и 7z не работают. После этого они имеют точно такой же размер. Есть ли у вас какие-либо идеи?Передача файлов Java через UDP. Сжатые файлы повреждены?

Чтения в части:

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 для этого. –

+0

Мне нужно использовать UDP, у меня есть собственный протокол, чтобы убедиться, что все передано и не повреждено. Так байт по байт тот же ... – LittelTeddy

+0

Вы не разместили весь соответствующий код. Как «контент» попадает на провод? и как формируется «выход»? – EJP

ответ

0

Ваших write() вызовов методов предполагают, что все буфер был заполнен receive(). Вы должны использовать длину, предоставленную с помощью DatagramPacket:

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

Если в пакете есть накладные расходы, например. порядковый номер, который должен быть, вам нужно будет соответствующим образом отрегулировать смещение и длину.

NB TCP гарантирует, что «все передано и не повреждено».