Comment transférer des fichiers d'un ordinateur à un autre sur le réseau en utilisant Java?


J'ai besoin d'une application simple, de préférence multiplateforme, qui permet l'envoi de fichiers entre deux ordinateurs.

, Il suffit d'accepter et envoyer les fichiers, et d'afficher une barre de progression. Quelles applications pourrais-je utiliser ou comment pourrais-je en écrire une?

Author: jjnguy, 2009-07-10

9 answers

Envoi et réception de fichiers

L'envoi et la réception d'un fichier se décomposent essentiellement en deux simples morceaux de code.

Code de réception:

ServerSocket serverSoc = new ServerSocket(LISTENING_PORT);

Socket connection = serverSoc.accept();

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

Code d'envoi:

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);

Le morceau de code d'envoi sera exécuté sur l'ordinateur qui envoie le code quand ils veulent envoyer un fichier.

Le code de réception doit être placé dans une boucle, de sorte que chaque fois que quelqu'un veut se connecter au serveur, le serveur peut gérer la demande, puis aller retour à l'attente sur serverSoc.accepter().

Pour permettre l'envoi de fichiers entre les deux ordinateurs, chaque ordinateur devra exécuter le serveur (code de réception) pour écouter les fichiers entrants, et ils devront tous deux exécuter le code d'envoi lorsqu'ils souhaitent envoyer un fichier.

Barre De Progression

Le JProgressBar dans Swing est assez facile à utiliser. Cependant, le faire fonctionner correctement et montrer la progression actuelle du transfert de fichiers est légèrement plus difficile.

Pour obtenir une barre de progression pour apparaître sur un formulaire, il suffit de le déposer sur un JFrame et peut-être de définir setIndeterminate(false), donc cela montre que votre programme fonctionne.

Pour implémenter correctement une barre de progression, vous devrez créer votre propre implémentation d'un SwingWorker. Les tutoriels Java en ont un bon exemple dans leur leçon sur la concurrence .

C'est une question assez difficile en soi. Je recommanderais de poser ceci dans sa propre question si vous avez besoin de plus d'aide.

 4
Author: jjnguy, 2009-07-10 13:26:56

Woof est un script Python cool qui pourrait fonctionner pour vous:

Http://www.home.unix-ag.org/simon/woof.html

 7
Author: Nate, 2009-07-10 13:16:15

J'envisagerais fortement d'utiliser FTP. Apache a un FTP clients et a serveur

Edit: la suggestion de spdenne de HTTP est également bonne, surtout si tout le monde a Java 6. Sinon, vous pouvez utiliser quelque chose commeTiny Java Web Server .

 3
Author: Matthew Flaschen, 2009-07-10 22:20:07

Vous pouvez en écrire un en utilisant la programmation Socket en Java. Vous auriez besoin d'écrire un serveur et un programme client. Le serveur utiliserait un ServerSocket pour écouter les connexions, et le Client utiliserait un socket pour se connecter à ce serveur sur le port spécifié.

Voici un tutoriel: http://www.javaworld.com/jw-12-1996/jw-12-sockets.html

 1
Author: AlbertoPL, 2009-07-10 12:48:58

Java 6 de Sun comprend une API de serveur HTTPlégère et une implémentation. Vous pouvez assez facilement l'utiliser pour servir votre fichier, en utilisant URLConnection pour l'obtenir.

 1
Author: Stephen Denne, 2009-07-10 13:02:21

Consultezce tutoriel , c'est un exemple vraiment basique. Vous voudrez probablement également envoyer des en-têtes de contrôle avant l'envoi du fichier réel, contenant la taille du fichier, le nom du fichier, etc.

Alternativement, basez-le sur un protocole existant, commece projet .

 0
Author: Kazar, 2009-07-10 12:51:43

Pouvez-vous installer des serveurs FTP sur une de vos machines ?

Si vous le pouvez, il vous suffira d'utiliser un client FTP (FileZilla par exemple, qui a une barre de progression).

 0
Author: Benoit Courtine, 2009-07-10 12:59:45

Deux applications populaires sont "scp" et "rsync". Ceux-ci sont standard sur Linux, sont généralement disponibles sur Unix et peuvent être exécutés sous Windows sous cygwin, bien que vous puissiez trouver des applications natives Windows qui peuvent le faire aussi. (PuTTY peut servir de client SCP).

Pour tout type de transfert de fichiers pc à pc, vous devez avoir un écouteur sur le PC de destination. Cela peut être une application démon (ou un processus système Windows), ou il peut s'agir d'un "superserveur" de style Unix configuré pour charger et exécuter le fichier réel-copier l'application lorsque quelqu'un contacte le port d'écoute.

SCP et l'un des modes rsync nécessitent une sorte de capacité de connexion à distance. Rsync peut également publier des ressources qu'il gérera répertoire. Étant donné que le concept de "connexion à distance" Windows n'est pas aussi bien établi que sous Linux, cela peut être préférable. De plus, il limite l'accès à distance aux sources/cibles définies sur la machine de destination au lieu de permettre l'accès à toute partie (autorisée) du système de fichiers.

 0
Author: Tim H, 2009-07-10 13:36:01

Pour transférer plus efficacement sur un réseau. Jetez un oeil à cet article qui explique le transfert de données efficace par zéro copie

 0
Author: Ram, 2009-10-02 17:45:45