/ / Java прехвърляне на файлове чрез UDP. Компресираните файлове са повредени? - Java, файл, работа в мрежа, udp, прехвърляне на файлове

Java прехвърля файлове чрез UDP. Компресираните файлове са повредени? - java, файл, мрежови, udp, файлов трансфер

Опитвам се да прехвърлям файлове с aDatagrammSocket в Java. Аз чета файловете на 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 за отговор № 1

Вашият write() При извикването на метода се приема, че целият буфер е попълнен от receive(). Трябва да използвате дължината, предоставена с DatagramPacket:

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

Ако в пакета има над главата, напр. пореден номер, който трябва да има, трябва да коригирате съответно отместването и дължината.

NB TCP ще гарантира, че "всичко се прехвърля и не се поврежда".