Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Java - Передача файлов по сети (Java)

Ответить
Настройки темы
Java - Передача файлов по сети (Java)

Аватара для EvgeniyQQQ

Пользователь


Сообщения: 133
Благодарности: 21

Профиль | Сайт | Отправить PM | Цитировать


Добрый день! Пишу две программки (клиент и серверок на языке Java), одной из функций которых является передача файлов (от клиента к серверу). Читаю файл клиентом в переменную типа char и передаю его методом write(), который является методом класса BufferedWriter. Читаю из потока функцией read(), класса BufferedReader.
Проблема состоит в том, что когда я считываю 255 байт, передаю их по сети, выводимые в файл данные весят 270 байт. Откудато берутся 15 лишних байт. В начале файла появляется знак ?, в конце 14 символов форматирования (блокнот их отображает как пробелы). Выводя данные в файл, я указываю, что записываю 255 байт, но толку от этого нет.

Фрагмент кода клиента:
Код: Выделить весь код
   ...

 InputStream inputStream = new FileInputStream("C:\\example.xml");
 InputStreamReader inputStreamReader = new InputStreamReader(inputStream,"UTF-8");

 System.out.println("IP/MAC: "); 
 BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
 String str = r.readLine();
 r.close();
			
 Socket s = new Socket(str, 32000);
			
 BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream()));
 BufferedWriter output = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));

 char[] buf = new char[255];
 int len = 0;
 while ((len = inputStreamReader.read(buf, 0, buf.length)) > 0)
 {
     output.write(buf);
     output.flash();
 }

 output.close();
 inputStreamReader.close();
			
 s.close();

   ...
Фрагмент кода сервера:
Код: Выделить весь код
  ...
                    
 BufferedReader in = new BufferedReader(new InputStreamReader(incoming.getInputStream()));
			
 char[] buf = new char[255];

 OutputStream outputStream = new FileOutputStream("C:\\exampleCopyXML.xml");
 //Приводим поток к потоку форматированного вывода
 OutputStreamWriter outStreamWriter = new OutputStreamWriter(outputStream, "UTF-8");

 int len = 0;
			
 while (((len = in.read(buf))) > 0)
 {
     //Выводим в файл полученный пакет
     outStreamWriter.write(buf,0,255);
 }

 in.close();
 outStreamWriter.close();
                   
  ...
Помогите, пожалуйста.

-------
"Не соглашайся ни на что, кроме совершенства!" - Анонимный автор.
"Совершенство достигается только к моменту полного краха." - К.Н.Паркинсон.


Отправлено: 17:32, 30-07-2007

 

Аватара для EvgeniyQQQ

Пользователь


Сообщения: 133
Благодарности: 21

Профиль | Сайт | Отправить PM | Цитировать


Описанная выше проблема была решена путём по байтной передаче файла.

Возник ёще один вопросик. Может ли для одного процесса (приложения) быть открыто несколько портов.

Как я понимаю, порт (в данном случае) - это идентификатор процесса. Значит не может? Но очень надо.

-------
"Не соглашайся ни на что, кроме совершенства!" - Анонимный автор.
"Совершенство достигается только к моменту полного краха." - К.Н.Паркинсон.


Отправлено: 14:57, 01-08-2007 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для EvgeniyQQQ

Пользователь


Сообщения: 133
Благодарности: 21

Профиль | Сайт | Отправить PM | Цитировать


Добрый, день! Вопрос по поводу тех же сервера и клиента.
Клиент выполняет отправку файлов по сети по протоколу TCP. Сервер принимает эти файлики и выполняет дальнейшие действия.

Проблемка состоит в том, что если клиент пытается передать весь файл сразу, то у сервера выскакивает исключение... файлик не передаётся...
Поборол проблему установив размер передаваемого пакета в 1024 байт. То есть, клиент разбивает файл на пакеты размером 1024 байта или меньше. Передаёт первый пакет, ждёт ответа сервера, передаёт второй пакет и т.д. Проблема состоит в том, что чем меньше размер пакета, тем ниже скорость передачи. Та скорость, что получается при размере пакета 1024 байт явно меньше той, с которой передаются файлики при использовании стандартных средств Windows.
Хотелось бы разобраться.... что же происходит? И найти решение как оптимизировать программки.

Прошу помощи

-------
"Не соглашайся ни на что, кроме совершенства!" - Анонимный автор.
"Совершенство достигается только к моменту полного краха." - К.Н.Паркинсон.


Отправлено: 14:19, 17-11-2008 | #3



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Java - Передача файлов по сети (Java)

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Рассылка файлов по сети на каждый комп (и сбор файлов с компов) Serg2010 Скриптовые языки администрирования Windows 7 18-08-2009 11:08
передача файлов через интернет lxa85 Хочу все знать 6 30-06-2008 19:24
Передача файла по сети через idTCPClient/Server - глюк! DANTIST Программирование и базы данных 1 14-11-2004 23:20
передача сообщения по локальной сети shark21 Сетевые технологии 5 25-09-2003 12:31
Delphi - Передача файла по сети в Delphi DANTIST Программирование и базы данных 4 08-03-2003 23:59




 
Переход