Официальный сайт студ.городка НГТУ
Программирование и БД » [java] Проблема с отправкой файла клиенту 

#1  17.11.07 16:49

[java] Проблема с отправкой файла клиенту

Дело в следующем - Клиент  отправляет запрос серверу на получение файла, сервер проверяет наличие данного файла и если его найдет отправляет его.
Client

Код::

fis_out = new FileOutputStream("./trans_in/"+name);
f(file_size < path_size) path_size = file_size;
change_size = file_size;
byte[] path_buffer = new byte[path_size];
int read;
while(change_size > 0)
 {
read = in_stream.read(path_buffer);
fis_out.write(path_buffer, 0, read);
change_size -= read;
full_size += read;
if(change_size < path_size)
     {
      path_buffer = new byte[change_size];
      path_size = change_size;
      }
}

Server

Код::

if(real_fileSize < real_fileSize) path_size = real_fileSize;
change_size = real_fileSize;
byte[] path_buffer = new byte[path_size];
int read;
while(change_size > 0)
{
 read = fis_in.read(path_buffer);
 full_size +=  read;
cn.out_stream.write(path_buffer); //<<<< Выскакивает исключение 
cn.out_stream.flush();
change_size -= path_size;
if(change_size < path_size)
  {
  path_buffer = new byte[change_size];
  path_size = change_size;
  }
}

// исключение
java.net.SocketException: Software caused connection abort: socket write error
    at java.net.SocketOutputStream.socketWrite0(Native Method)

P.S. Интересная особенность - если сделать передачу в обратном направлении то все работает без проблем

Подскажите пожалуйста в чем может быть проблема??? Заранее благодарен

Offline

#2  18.11.07 10:25

ZiF
Профиль

Re: [java] Проблема с отправкой файла клиенту

не совсем понятно что тут происходит по приведенному коду,
как вариант может быть что у клиента выскакивает исключение, а у сервера socket write error уже как следствие закрытого сокета.

зачем каждый раз перевыделять место для буффера в куче jvm для передачи куска данных ? лучше один раз выделить буфер килобайта на 4 и такими порциями его и передавать.

Исправлено ZiF (18.11.07 10:29)

Offline

#3  18.11.07 17:46

Re: [java] Проблема с отправкой файла клиенту

Начал проверять stream у клиента и сервера и оказалось что на стороне клиента (принимающего файл) не был определен
in_stream = socket.getInputStream();

Про буфер
//Задаю статически размер буфера...
int path_size = 128 * 1024;
Я его переопределяю только когда размер отстатка передаваемого файла оказался меньше чем path_size (происходит только 1 раз в конце).
// Файл читаю по размеру буфера и отправляю

Спасибо за совет... несколько раз смотрел не замечал этого косяка... )))

Offline

Программирование и БД » [java] Проблема с отправкой файла клиенту 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.023 сек.
Выполнено 14 запросов.