Java RMI Connecter Exception: Connexion refusée à l'hôte / timeout
Je suis en train de travailler sur un RMI de ligne de commande de jeu, mais, à chaque fois que j'essaie à mon Service, j'ai un message d'erreur comme ceci:
java.rmi.ConnectException: Connection refused to host: 192.168.56.1; nested exception is:
java.net.ConnectException: Connection timed out: connect
C'est la classe principale pour mon Server
:
public class RMIWar {
public static void main(String[] args) throws RemoteException, MalformedURLException {
try {
Controle obj = new Controle(4);
Registry reg = LocateRegistry.createRegistry(1099);
System.out.println("Server is ready");
reg.rebind("CtrlServ", obj);
}
catch (Exception e) {
System.out.println("Error: " + e.toString());
}
}
}
Le principal pour ma Client
classe:
public class RMIWarClient {
public static void main(String[] args) throws RemoteException, MalformedURLException, NotBoundException {
try {
Registry registry = LocateRegistry.getRegistry("localhost");
ControleInt ctrl = (ControleInt) registry.lookup("CtrlServ");
System.out.println("CtrlServ found...\n");
BioRMI bio = new BioRMI(null, 5,5,5);
ctrl.thRegister("Test", bio.atk, bio.def, bio.agi);
}
catch (Exception e) {
System.out.println("Error: " + e);
}
}
}
Des suggestions?
OriginalL'auteur Samuel Guimarães | 2011-12-13
Vous devez vous connecter pour publier un commentaire.
Tester si votre 1099 port est disponible (c'est à dire bloqué par le pare-feu). Aussi, vous n'avez pas mentionné l'OS que vous utilisez et si vous avez commencé le registre avant l'exécution de votre serveur.
Ce RMI tutoriel explique:
Par défaut, le registre s'exécute sur le port 1099, comme la vôtre.
Comme le tutoriel rapports, il suffit d'ouvrir une invite de commande (sous Windows) ou sur un terminal (sur un UNIX-like OS) et le type:
Pour Windows (utiliser javaw dans si le démarrage n'est pas disponible):
Système d'exploitation Solaris ou Linux:
Mise à JOUR
J'ai remarqué, à la suite de l'Oracle tutoriel et un mon projet de il y a le temps, que dans le
Server
classe, vous n'avez pas exporté de l'objet pour le RMI de l'exécution.Ensuite, vous devez modifier ces lignes:
:
Parce que le tutoriel rapports:
Aussi, si vous utilisez le même ordinateur hôte pour un RMI invocation, il n'est pas nécessaire dans le
Client
classe:Suffit de l'appeler:
Parce que Oracle reports:
un pare-feu port
À propos de délai d'attente de connexion, j'ai écrit: "Test si votre 1099 port est disponible". Cela signifierait pour vérifier si le port est disponible ou pare-feu. Ma remarque sur le départ de rmiregistry est parce que l'OP n'a rien écrit à ce sujet, et parce que, parfois, la non-exécution de la prestation est la raison de la connexion refusée. Si le Client souhaite exécuter une méthode de Serveur, mais si le Serveur n'a pas l'exécuter localement avec le service, le Client ne sera jamais exécuter la méthode.
J'ai été le tester sur un Mac et sur Windows 7. Aussi essayé sur un Win XP machine virtuelle sans Av / pare-feu, obtenu les mêmes résultats. J'ai changé getRegistry("localhost") à getRegistry("localhost",1099) et maintenant, j'ai reçu un java.rmi.UnmarshalException: erreur unmarshalling retour; nested exception: java.io.WriteAbortedException: l'écriture abandonnée; java.io.NotSerializableException
J'ai compris. La suite de l'Oracle tutoriel et l'examen de votre code, dans la classe de Serveur, vous n'avez pas été à l'exportation pour le RMI exécution de votre Controle objet (appelé "obj") avec "Controle stub = (Controle) UnicastRemoteObject.exportObject(obj, 0);" avant la création de Registre. Ensuite, vous devrez modifier la ligne "reg.rebind("CtrlServ", obj);" "reg.rebind("CtrlServ", tampon);"
OriginalL'auteur Alberto Solano
Être prudent sur les ports de la cause qu'ils pourraient être bloqués par un pare-feu, par exemple, si vous travaillez sur une zone sécurisée à l'instar de travail ou à l'université, l'administrateur pourrait avoir mis en œuvre des mesures de protection...
OriginalL'auteur melli-182
Je ne vois pas comment vous pouvez éventuellement être l'obtention de cette exception à partir de ce code. Selon le code de votre serveur et le client sont en cours d'exécution sur le même hôte, et vous n'obtenez pas les délais de connexion au sein de la même armée.
Donc, en supposant que ce n'est pas votre vrai code et vous êtes à la recherche de la bonne registre (hôte argument
getRegistry()
), je voudrais demander si 192.168.56.1 est l'adresse IP vous vous attendez à voir compte tenu de la topologie de votre réseau. C'est un réseau LAN interne, adresse et si votre client est en dehors du réseau local, il devrait être d'essayer de se connecter à plus d'une adresse IP publique. Si l'adresse n'est pas ce que vous attendez je vous renvoie à l'élément A. 1 sur le RMI FAQ.OriginalL'auteur user207421
Je l'ai décrit ma solution ici java.rmi.ConnectException: Connexion refusée à l'hôte: 127.0.1.1; et ici Impossible de se connecter à Tomcat MBeanServer via jconsole dans Java6. la question était de base problème de réseau, mais il peut arriver à quelqu'un d'autre.
OriginalL'auteur Paul