2009-07-01 8 views
0

Я создал серверную программу, которая отправит файл изображения клиенту. Моя программа отлично работает, если изображение имеет размер 512 байт. Но он отлично работает для большого файла.как отправить файл изображения по сети с помощью сокетного канала

В этом случае я не получаю точного изображения, которое я должен получить. означает, что восстановленное изображение некорректно. Итак, как решить эту проблему

Я использую канал сокета java и java nio на сервере, а простой сокет на стороне клиента.

Благодаря Сунил

ответ

1

Вот ваша ошибка:

while(fileChannel.read(buffer)>0) 

Метод read() не обязательно заполнить буфер; он будет считывать произвольное количество байтов и возвращать это число. Вы должны разрешить случай, когда он читает меньше емкости буфера и записывает только столько байтов, что также необходимо, так как размер файла не обязательно кратен вашему размеру буфера, и последнее чтение почти никогда точно не заполняет буфер ,

То же самое верно и на стороне клиента - available() здесь не пригодится, вам нужно просто прочитать, а затем обработать сколько бы байтов вы не получили.

0

Я не вижу, как вы делаете промывку и закрываете выходной поток на стороне клиента. Когда вы выходите, вы должны закрыть() выходной поток, и все файлы в кешировании будут записаны в файл.

 Смежные вопросы

  • Нет связанных вопросов^_^