Клиент не распознает конец файлового потока
Я делаю поток передачи файлов с Java
Вот код сервера
(fileWriter = new BufferedOutputStream(fileTransferSocket.getOutputStream()))
try {
BufferedInputStream fileReader = new BufferedInputStream(new FileInputStream(CLIENT_PATH + "/" + filename));
int packet;
while((packet = fileReader.read()) != -1)
fileWriter.write(packet);
fileWriter.flush();
fileReader.close();
System.out.println(filename + " send complete");
}
И код клиента
(fileReader = new BufferedInputStream(fileTransferSocket.getInputStream()))
try {
BufferedOutputStream fileWriter = new BufferedOutputStream(new FileOutputStream(new File(PROGRAM_PATH + "/" + filename)));
int packet;
while((packet = fileReader.read()) != -1)
fileWriter.write(packet);
System.out.println(filename + " receive complete.");
fileWriter.close();
}
Печать сервера
System.out.println(filename + " send complete");
Это означает, что сервер отправляет каждый байт файла.
Однако Клиент не печатает
System.out.println(filename + " receive complete.");
Я проверил, сколько раз во время цикла (проверено, сервер и клиент)
Оба цикла показов выполняются 685 раз
Я думаю, что клиентский цикл while не распознает конец передачи файла.
Кто-нибудь знает проблему?
2 ответа
Отправлять EOF
к розетке, закрой fileWriter
на сервере.
while((packet = fileReader.read()) != -1)
fileWriter.write(packet);
fileWriter.close(); // note
fileReader.close();
Вы можете проверить печать -1 в вашем сервисе, чтобы сообщить об окончании преобразования:
while((packet = fileReader.read()) != -1)
fileWriter.write(packet);
fileWriter.write(-1);