нарушенный сетевой канал Java и поврежденный полученный файл - PullRequest
0 голосов
/ 07 октября 2011

Я пытаюсь написать сервер, который принимает файлы, и записать его в определенный каталог, используя DataInputStream и BufferedInputStream.

Сервер получает «имя пользователя (строка)», «количество файлов (int)», «имя файла (строка)», «размер каждого файла (длинный)» и «содержимое файла, который не интерпретируется в байтах (байт []»). ) '

и если все прошло успешно, я должен отправить логическое значение.

Но проблема в том, что он не получает файл правильно.

Время от времени я получаю сообщение об ошибке «сломанная труба», или файл получен после получения.

Исправлена ​​проблема ..

Ответы [ 2 ]

3 голосов
/ 07 октября 2011

Одна маленькая вещь, которая может быть связана с вашей проблемой. Вы должны уменьшить вашу переменную размера файла на количество фактически прочитанных байтов вместо количества байтов, запрошенных для чтения:

       while(fileSize>0){
            if(fileSize < byteSize)
                byteSize = (int)fileSize;
            int byteRead = din.read(b, 0, byteSize);
            fos.write(b);
            fileSize -= byteRead; // <-- See here
        }
0 голосов
/ 07 октября 2011

Возможно, вы получаете эту ошибку, если при чтении ввода отправитель закрывает соединение. Вероятно, это не имеет ничего общего с вашим кодом. Отправитель мог тайм-аут, закрыть соединение до завершения передачи или многое другое.

Взгляните на этот связанный вопрос: Как исправить java.net.SocketException: Сломанная труба?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...