2017-09-19 3 views
1

J'essaie d'obtenir des objets distants à partir d'un serveur hébergé sur un réseau différent. Je peux me connecter sur la même machine et sur le même réseau, mais quand j'essaye de l'obtenir à partir du réseau différent je reçois:Connexion Java RMI via Internet

La connexion a refusé d'accueillir: 192.168.1.131; l'exception imbriquée est: java.net.ConnectException: la connexion a expiré: connect

Il semble que la fonction de recherche recherche un mauvais réseau. J'ai essayé d'utiliser System.setProperty mais cela ne fonctionne pas. Voici le code:

serveur

public class Main { 

    public static void main(String[] args) { 
     try{ 
      System.out.println("Init server...\n"); 
      TestInterface test = new TestImplement(); 


      System.setProperty("java.rmi.server.hostname", "95.247.x.x"); 
      System.out.println("Reg RMI...\n"); 
      Registry rmiRegistry = LocateRegistry.createRegistry(5555); 
      rmiRegistry.rebind("Test" , test); 
      System.out.println("Reg completed!\n"); 
      }catch(Exception e){ 
       e.printStackTrace(); 
      } 
     } 

} 

client

... 
registryRMI = LocateRegistry.getRegistry("95.247.x.x",5555); 
TestInterface testClient = (TestInterface)registryRMI.lookup("Test"); 
... 

Ai-je besoin de mettre java.rmi.server.hostname en pot client aussi bien?

+1

Vérifiez si vous êtes en mesure de telnet sur le port 5555. – mkalsi

+0

ainsi la question est pourquoi le client essaye de se connecter '192.168.1.131' .. peut-être que le registre lie l'instance à cette adresse .. l'avez-vous fait? – gusto2

+0

@ gusto2 'Le registre lie l'instance à cette adresse' n'a absolument aucun sens. L'application * lie le * nom * à l'instance * via le * Registre *. Il n'y a pas de notion d'adresse dans l'opération 'Registry.bind()'. – EJP

Répondre

0
TestInterface test = new TestImplement(); 
System.setProperty("java.rmi.server.hostname", "95.247.x.x"); 

Vous devez définir java.rmi.server.hostnameavant exporter des objets à distance. Le faire ensuite est trop tard.

System.setProperty("java.rmi.server.hostname", "95.247.x.x"); 
TestInterface test = new TestImplement(); 
+0

Ok maintenant le client obtient l'adresse IP correcte, mais la connexion est toujours expirée. "La connexion a été refusée à l'hôte: 95.247.x.x; l'exception imbriquée est: java.net.ConnectException: la connexion a expiré: connect" J'ai effectué une redirection de port dans mon routeur afin de mapper correctement le port externe sur le port interne. Toujours obtenir cette erreur. – TheEnigmist

+0

Non, vous obtenez maintenant une erreur * nouvelle *. Il n'y a pas «encore» à ce sujet. Le problème est maintenant que vous n'avez pas fait la redirection de port correctement, ou que 95.247.x.x est derrière un pare-feu, ou un autre problème de connectivité réseau. – EJP

+0

Le problème n'est pas le pare-feu parce que si je mets sur le serveur 'java.rmi.server.hostname" blablabla "' sur le client, je reçois 'java.net.UnknownHostException: blablabla' afin que le client est en mesure de récupérer le registre ou au moins première connexion, après cela, il ne peut pas progresser pour la connexion expiré. – TheEnigmist