Как перенести файлы с одного компьютера на другой по сети с помощью Java?
Мне нужно простое приложение, желательно кросс-платформенное, которое позволяет отправлять файлы между двумя компьютерами.
ему просто нужно принять и отправить файлы и показать индикатор выполнения. Какие приложения я мог бы использовать или как я мог бы написать?
9 ответов
отправка и получение файлов
отправка и получение файла в основном разбивается на два простых фрагмента кода.
получать код:
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.принимать.)(
чтобы разрешить отправку файлов между обоими компьютерами, каждый компьютер должен будет запустить сервер (принимающий код) для прослушивания входящих файлов, и им обоим нужно будет запустить отправляющий код, когда они хотят отправить файл.
Прогресс-Бар
на JProgressBar
in Swing достаточно прост в использовании. Однако, чтобы заставить его работать правильно и показать текущий прогресс файла перевод немного сложнее.
чтобы получить прогресс-бар на форме, только положив его на JFrame
и, возможно, параметр setIndeterminate(false)
так что это показывает, что ваша программа работает.
чтобы правильно реализовать индикатор выполнения, вам нужно будет создать свою собственную реализацию SwingWorker
. По Java есть хороший пример этого в ихурок параллелизм.
это довольно сложный вопрос но сам по себе. Я бы рекомендовал задать этот вопрос в своем собственном вопросе, если вам нужна дополнительная помощь.
Я бы настоятельно рекомендовал использовать FTP. Apache имеет FTP клиент и сервер
Edit: предложение spdenne HTTP также хорошо, особенно если у всех есть Java 6. Если нет, вы можете использовать что-то вроде Крошечный Веб-Сервер Java.
вы можете написать один, используя программирование сокетов на Java. Вам нужно будет написать сервер и клиентскую программу. Сервер будет использовать ServerSocket для прослушивания соединений, а клиент будет использовать сокет для подключения к этому серверу на указанном порту.
вот учебник:http://www.javaworld.com/jw-12-1996/jw-12-sockets.html
Java 6 Sun включает в себя легкийHTTP server API и реализации. Вы можете довольно легко использовать это для обслуживания вашего файла, используя URLConnection для его получения.
можете ли вы установить FTP-серверы на (одной из) ваших машин ?
Если вы можете, вам просто нужно будет использовать FTP-клиент (например, FileZilla, у которого есть индикатор выполнения).
два популярных приложения - "scp"и " rsync". Они стандартны в Linux, обычно доступны в Unix и могут быть запущены в Windows под cygwin, хотя вы можете найти собственные приложения windows, которые могут это сделать. (Шпатлевка может служить клиентом SCP).
для любого вида передачи файлов с ПК на ПК вам необходимо иметь прослушиватель на конечном ПК. Это может быть приложение демона (или системный процесс Windows), или это может быть "суперсервер" в стиле Unix, настроенный для загрузки и запустите фактическое приложение для копирования файлов, когда кто-то свяжется с портом прослушивания.
SCP и один из режимов rsync требуют, чтобы была какая-то возможность удаленного входа в систему. Rsync также может публиковать ресурсы, которые он будет обрабатывать каталог. Поскольку концепция "удаленного входа" в Windows не так хорошо установлена, как в Linux, это может быть предпочтительнее. Кроме того, он ограничивает удаленный доступ к определенным источникам / целям на конечном компьютере вместо доступа к любой (авторизованной) части файловой системы.
для более эффективной передачи по сети. Взгляните на в этой статье это объясняет эффективную передачу данных через нулевую копию