Опитвам се да прехвърлям файлове с 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 ще гарантира, че "всичко се прехвърля и не се поврежда".