Клиент не распознает конец файлового потока

Я делаю поток передачи файлов с 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);
Другие вопросы по тегам