Я работаю над алгоритмом, который будет получать данные, и я хочу записать их в файл.
Первый пакет, который я получаю, - это пакет, содержащий fileName.
Второй пакет содержит sizeOfPacket.
Затем я должен рассчитать количество пакетов, которые я получаю.
Но моя настоящая проблема начинается, когда я хочу получить следующие пакеты и записать эти пакеты в файл побайтно.
Я пробовал это разными способами, но каждый раз результирующий файл имеет размер всего 1 КБ, а фактическое изображение - 72 КБ.
Я должен читать из пакетов с 4-го байта, потому что первые 4 байта хранят положение пакета в файле.
Размер каждого пакета 1024B
public void run(int port) throws IOException {
try {
byte[] receiveData = new byte[1024];
DatagramSocket serverSocket = new DatagramSocket(port);
System.out.printf("Listening on udp:%s:%d%n",
InetAddress.getLocalHost().getHostAddress(), port);
DatagramPacket receivePacket = new DatagramPacket(
receiveData,
SIZE_OF_PACKET
);
//first packet with name of file
serverSocket.receive(receivePacket);
String fileName = utils.getFileName(receivePacket);
//System.out.println(fileName);
//System.out.println(fileName.length());
//second packet with size of whole data()
serverSocket.receive(receivePacket);
int sizeOfFile = utils.BytesToInt(receivePacket);
//get number of packets that are needed
int numOfPackets = utils.getNumOfPackets(sizeOfFile);
//System.out.println(sizeOfFile);
//System.out.println(numOfPackets);
//output stream for file "test.jpg"
FileOutputStream fos = new FileOutputStream("test.jpg");
//loop over for the number of Packets
for(int i = 0; i < numOfPackets - 1; i++) {
serverSocket.receive(receivePacket);
receiveData = receivePacket.getData();
//byte byte after byte and write it to the file
// start at index 3 bcs first byte is packet number
for(int a = 3; a < SIZE_OF_PACKET - 1;a++) {
Byte nextByte = receiveData[a];
if(nextByte != 0) fos.write(nextByte);
}
}
fos.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}