Делаю передачи файлов Темы с ЯвыКлиент не распознает конец потока файла
Вот код Сервера
(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.");
Я проверил, сколько раз в то время как работает цикл (Проверен Both, сервер и клиент)
Оба в то время как петля бежит 685 раз
Я думаю, Цикл while клиента не распознает конец передачи файла.
Кто-нибудь знает проблему?
Это тоже не работает ... Я не могу избежать цикла. –
Это неправильно. Отправка -1 просто отправляет значение байта '0xFF'. -1 возвращается специально методом «чтения» входного потока, он не является частью самого потока. – Radiodef
Кажется, что в базовом потоке ввода или вывода байт равен 0-255, поэтому в уровне преобразования данных вы не можете сказать клиенту, что это конец. В противном случае вы закроете сокет или используете логические данные приложения, замените конец, а не только -1 в клиенте. Это могут быть некоторые специальные символы. –