Как передать файлы с одного компьютера на другой по сети с помощью Java? - PullRequest
9 голосов
/ 10 июля 2009

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

Нужно просто принять и отправить файлы и показать индикатор выполнения. Какие приложения я могу использовать или как написать одно?

Ответы [ 9 ]

7 голосов
/ 10 июля 2009

Woof - это крутой скрипт на Python, который может подойти вам:

http://www.home.unix -ag.org / симон / woof.html

5 голосов
/ 10 июля 2009

Отправка и получение файлов

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

Получение кода:

ServerSocket serverSoc = new ServerSocket(LISTENING_PORT);

Socket connection = serverSoc.accept();

// code to read from connection.getInputStream();

Отправка кода:

File fileToSend;
InputStream fileStream = new BufferedInputStream(fileToSend);

Socket connection = new Socket(CONNECTION_ADDRESS, LISTENING_PORT);
OutputStream out = connection.getOutputStream();

// my method to move data from the file inputstream to the output stream of the socket
copyStream(fileStream, out);

Отправляющий фрагмент кода будет запущен на компьютере, который отправляет код, когда они хотят отправить файл.

Получающий код необходимо поместить в цикл, чтобы каждый раз, когда кто-то хочет подключиться к серверу, сервер мог обработать запрос и затем вернуться к ожиданию на serverSoc.accept ().

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

Индикатор выполнения

JProgressBar в Swing достаточно прост в использовании. Однако заставить его работать должным образом и показывать текущий прогресс передачи файла немного сложнее.

Чтобы индикатор выполнения отображался в форме, нужно просто перетащить его на JFrame и, возможно, установить setIndeterminate(false), чтобы показать, что ваша программа работает.

Для правильной реализации индикатора выполнения вам необходимо создать собственную реализацию SwingWorker. Уроки Java имеют хороший пример этого на уроке по параллелизму .

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

3 голосов
/ 10 июля 2009

Я бы настоятельно рекомендовал использовать FTP. Apache имеет FTP клиент и сервер

Изменить: предложение spdenne HTTP также хорошо, особенно если у всех есть Java 6. Если нет, вы можете использовать что-то вроде Tiny Java Web Server .

1 голос
/ 10 июля 2009

Sun Java 6 включает в себя облегченный API-интерфейс HTTP-сервера и реализацию. Вы можете довольно легко использовать это для обслуживания вашего файла, используя URLConnection для его получения.

1 голос
/ 10 июля 2009

Вы можете написать один, используя Socket-программирование на Java. Вам нужно написать программу для сервера и клиента. Сервер будет использовать ServerSocket для прослушивания соединений, а Клиент будет использовать Socket для подключения к этому серверу через указанный порт.

Вот учебник: http://www.javaworld.com/jw-12-1996/jw-12-sockets.html

0 голосов
/ 02 октября 2009

Для более эффективной передачи по сети. Взгляните на эту статью , которая объясняет эффективную передачу данных через нулевую копию

0 голосов
/ 10 июля 2009

Два популярных приложения - «scp» и «rsync». Они являются стандартными в Linux, обычно доступны в Unix и могут быть запущены в Windows под Cygwin, хотя вы можете найти приложения для Windows, которые также могут это делать. (PuTTY может служить клиентом SCP).

Для передачи файлов с компьютера на компьютер требуется прослушиватель на конечном компьютере. Это может быть приложение-демон (или системный процесс Windows) или «суперсервер» в стиле Unix, настроенный для загрузки и запуска реального приложения для копирования файлов, когда кто-то подключается к порту прослушивания.

SCP и один из режимов rsync требуют наличия возможности удаленного входа в систему. Rsync также может публиковать ресурсы, которые он будет обрабатывать каталогом. Поскольку концепция «удаленного входа» в Windows не так устоялась, как в Linux, это может быть предпочтительнее. Кроме того, он ограничивает удаленный доступ к определенным источникам / целям на конечном компьютере, вместо того чтобы разрешать доступ к любой (авторизованной) части файловой системы.

0 голосов
/ 10 июля 2009

Можете ли вы установить FTP-серверы на (один из) ваших компьютеров?

Если вы можете, вам просто нужно использовать FTP-клиент (например, FileZilla с индикатором выполнения).

0 голосов
/ 10 июля 2009

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

В качестве альтернативы, основывайте его на существующем протоколе, таком как этот проект.

...