|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Java - Передача файлов по сети (Java) |
|
Java - Передача файлов по сети (Java)
|
Пользователь Сообщения: 133 |
Профиль | Сайт | Отправить 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 |
Пользователь Сообщения: 133
|
Профиль | Сайт | Отправить PM | Цитировать Описанная выше проблема была решена путём по байтной передаче файла.
Возник ёще один вопросик. Может ли для одного процесса (приложения) быть открыто несколько портов. Как я понимаю, порт (в данном случае) - это идентификатор процесса. Значит не может? Но очень надо. |
------- Отправлено: 14:57, 01-08-2007 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 133
|
Профиль | Сайт | Отправить PM | Цитировать Добрый, день! Вопрос по поводу тех же сервера и клиента.
Клиент выполняет отправку файлов по сети по протоколу TCP. Сервер принимает эти файлики и выполняет дальнейшие действия. Проблемка состоит в том, что если клиент пытается передать весь файл сразу, то у сервера выскакивает исключение... файлик не передаётся... Поборол проблему установив размер передаваемого пакета в 1024 байт. То есть, клиент разбивает файл на пакеты размером 1024 байта или меньше. Передаёт первый пакет, ждёт ответа сервера, передаёт второй пакет и т.д. Проблема состоит в том, что чем меньше размер пакета, тем ниже скорость передачи. Та скорость, что получается при размере пакета 1024 байт явно меньше той, с которой передаются файлики при использовании стандартных средств Windows. Хотелось бы разобраться.... что же происходит? И найти решение как оптимизировать программки. Прошу помощи |
------- Отправлено: 14:19, 17-11-2008 | #3 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|