IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

[RMI] Transfert de fichier


Sujet :

Java

  1. #1
    Membre du Club
    Inscrit en
    Février 2013
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 54
    Points : 65
    Points
    65
    Par défaut [RMI] Transfert de fichier
    Bonjour a tous je vous expose mon probleme.
    Je doit faire des transferts de fichiers en upload et download a partir d'un programme java. Je me suis dirigé vers rmi. Pour l'instant ma partie client et serveur sont operationnelle mais seulement en local (a l'interieur d'un meme reseau). J'aurais besoin de faire la meme chose mais en ayant le client et le serveur non connecte dans le meme reseau (via internet)
    en local la partie client demande bien le fichier. Il est passé via l'api rmiio et transferer sur le client. Mais a l'exterieur rien pas de connexion.
    Question est je rate quelque chose ou suis-je partie sur la mauvaise piste?

    merci de votre aide.

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    RMI n'est pas vraiment le protocole que j'aurais choisi pour du transfert de fichier. C'est destiné à créer des objets partagé entre le client et le server où les appels de méthodes sont transformés en appels réseau. Ca marche assez mal quand une des machines est derrière un firewall, est en adressage privé ou, comme c'est souvent le cas avec des connexion internet à domicile: la combinaison des deux. Maintenant, si tu veux vraiment faire du RMI, commence par nous expliquer comment t'as structuré ton client, ton serveur, comment s'établis la connexion, quels messages d'erreur tu as.

  3. #3
    Membre du Club
    Inscrit en
    Février 2013
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 54
    Points : 65
    Points
    65
    Par défaut
    Merci de ta réponse. Ce n'est pas que je veut faire du rmi absolument, c'est juste que j'ai choisi cette voie.

    L'idee c'est qu'a partir de mon client java je puisse prendre un fichier sur un serveur distant un fichier le depose sur le client et l'ouvrir.

    sur le meme reseau pas de soucis. de l'exterieur je me connecte bien au serveur je vois son registry mais des que je lance la methode pour récupérer le fichier sa plante

    si une autre solution existe pour faire ce que je veut et qui n'utilise pas RMI je suis preneur.

    partie client

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    			 byte[] buffer = new byte[1];
    						 Registry reg=LocateRegistry.getRegistry("monserveur.com",1098);
    						 String[] t=reg.list();
    				         IfFichier tmp=null;
    				    	 try {
     
    				    		 // appel RMI
     
    							tmp=(IfFichier) reg.lookup("RmiFichier"); // je voit bien le registry
    						} catch (NotBoundException e) {
    							// TODO Bloc catch généré automatiquement
    							e.printStackTrace();
    						}
     
    				    	  SerializableInputStream tmpFic;
    				    	  //tmpFic=tmp.getFic(cheminFichier);
    				    	  tmpFic=tmp.getFic(cheminFichier,nom);  // l'errreur est a ce niveau
     
    				    	  // on parcours le buffer et creaation du fichier de sortie
     
    				    	  while (tmpFic.read(buffer) > 0)
    					        out_strm.write(buffer);
    				    	  out_strm.flush();
    					      out_strm.close();
    partie serveur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // partie declaration
    		LocateRegistry.createRegistry(1098);
    			Registry registry = LocateRegistry.getRegistry(Srv,1098);
    			registry.rebind("RmiFichier", RmiFichier);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	public SerializableInputStream getFic(String Rep, String nom) throws IOException,RemoteException {
     
     
    		InputStream inputStream = new FileInputStream(Rep+"/"+nom);
    		System.out.println("envoi du fichier "+nom);
    		// TODO Stub de la méthode généré automatiquement
    		return     new SerializableInputStream(new DirectRemoteInputStream(inputStream));  
    	}


    l'erreur souleve

    java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested exception is:
    java.net.ConnectException: Connection refused: connect
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source)
    at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source)
    at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source)
    at sun.rmi.server.UnicastRef.invoke(Unknown Source)
    at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(Unknown Source)
    at java.rmi.server.RemoteObjectInvocationHandler.invoke(Unknown Source)
    at com.sun.proxy.$Proxy0.getFic(Unknown Source)
    at Gestion.data.gestionFichiers.Visualisation(gestionFichiers.java:141)
    at Gestion.data.listeDocuments.actionPerformed(listeDocuments.java:509)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.AbstractButton.doClick(Unknown Source)
    at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
    at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$500(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
    Caused by: java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(Unknown Source)
    at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(Unknown Source)
    ... 47 more

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par fmvgld Voir le message
    L'idee c'est qu'a partir de mon client java je puisse prendre un fichier sur un serveur distant un fichier le depose sur le client et l'ouvrir.
    je n'ai rien compris à cette phrase

    si une autre solution existe pour faire ce que je veut et qui n'utilise pas RMI je suis preneur.
    Ouvrir une socket et établir un protocole maison tout simple?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested exception is:
    Du coté serveur, tu a enregistré ton composant RMI avec comme adresse de connection "127.0.0.1". Il faut donner une IP publique et non pas "localhost". Sinon le client il fait ce qu'on luit dit, se connecter à "localhost".

  5. #5
    Membre du Club
    Inscrit en
    Février 2013
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 54
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    je n'ai rien compris à cette phrase


    Ouvrir une socket et établir un protocole maison tout simple?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested exception is:
    Du coté serveur, tu a enregistré ton composant RMI avec comme adresse de connection "127.0.0.1". Il faut donner une IP publique et non pas "localhost". Sinon le client il fait ce qu'on luit dit, se connecter à "localhost".

    Je vait essayer d'etre plus clair. J'ai mon client qui recupere des données sur une BD exterieur. Je voudrais qu'a partir de ce client je puisse gérer des fichiers soit les déposer soit les recuperer.
    je gerer des salaries qui ont des contrats de travail. Je voudrais attacher des fichiers PDF (le contrat scanner) a chaque ligne de contrat. je clic sur la ligne de contrat et je tranfert le fichier pdf attaché sur mon client et je l'ouvre.


    Mon composant RMI est bien enregistrer avec une adresse public et non en localhost

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    	String Srv="monserveur.com";
     
     
    			// System.setSecurityManager(new java.rmi.RMISecurityManager());
    			// declation des implementations
     
    			SrvFichier RmiFichier=new SrvFichier();
     
    			LocateRegistry.createRegistry(1098);
    			Registry registry = LocateRegistry.getRegistry(Srv,1098);
    			registry.rebind("RmiFichier", RmiFichier);

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    et le reste de tes données dans la DB(nom du client etc) tu le récupère comment? Parce qu'à priori tu n'a pas besoin de quelque chose de séparé pour le fichier. Si tu as déjà des services pour exposer ta DB, utilise la même chose pour les fichiers.

  7. #7
    Membre du Club
    Inscrit en
    Février 2013
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 54
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    et le reste de tes données dans la DB(nom du client etc) tu le récupère comment? Parce qu'à priori tu n'a pas besoin de quelque chose de séparé pour le fichier. Si tu as déjà des services pour exposer ta DB, utilise la même chose pour les fichiers.
    effectivement j'avais pense utilisé les blob pour cela mais j'etait ensuite parti sur RMI et stocker plutot mes données sous forme de fichiers sur un espace disque.

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Si tu veux vraiment transférer les fichier à part, utilise un protocole standard (sftp/ scp /....) ça te permettra au minimum de gérer correctement la sécurité, ou crée un webservice au dessus de ta DB e accède à tes données via le webservice.

  9. #9
    Membre du Club
    Inscrit en
    Février 2013
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 54
    Points : 65
    Points
    65
    Par défaut
    Mouai je vais sûrement me diriger la dessus. J'aurai bien voulu savoir pourquoi dans le réseau ça passe mais de l'extérieur non.

    Merci de ton attention et de tes reponses

  10. #10
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par fmvgld Voir le message
    J'aurai bien voulu savoir pourquoi dans le réseau ça passe mais de l'extérieur non.
    Et moi j'aimerais parfois bien savoir pourquoi je réponds
    Citation Envoyé par tchize_ Voir le message
    Du coté serveur, tu a enregistré ton composant RMI avec comme adresse de connection "127.0.0.1". Il faut donner une IP publique et non pas "localhost". Sinon le client il fait ce qu'on luit dit, se connecter à "localhost".

  11. #11
    Membre du Club
    Inscrit en
    Février 2013
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 54
    Points : 65
    Points
    65
    Par défaut
    J'ai bien lu ta réponse et j'ai répondu que non je n'avais pas mis l'adresse localhost pour enregistrer mon serveur j'ai essayer avec son adresse privé et avec son adresse public et dans les deux cas j'ai le même message.

  12. #12
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Déjà ton code n'exporte pas le serveur, pour l'exporter, il faut passer par UnicastRemoteObject.exportObject. Ensuite, si tu a besoin de préciser l'interface d'export parce que l'interface par défaut choisi la mauvaise ip locale, utilise les SocketFactory.


    Enfin, comme déjà dit, il faut que le serveur RMI soit sur une adresse publique, pas sur un NAT.

  13. #13
    Membre du Club
    Inscrit en
    Février 2013
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 54
    Points : 65
    Points
    65
    Par défaut
    merci pour tes réponses. Je vais suivre une autre voie

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [RMI] transfert fichier
    Par guitariste dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 30/12/2008, 17h04
  2. RMI et transfert de fichier
    Par Bonjobo dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 28/11/2007, 10h52
  3. Réponses: 17
    Dernier message: 15/05/2007, 18h35
  4. [RMI] transfert de fichier
    Par ryo ohki dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 11/08/2005, 12h07
  5. [Socket]Transfert de fichier
    Par Aminos dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 19/04/2003, 13h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo