Java RMI Verbindung Exception: Connection refused to host / timeout
Arbeite ich an einem RMI-command-line-Spiel, aber immer wenn ich versuche, meinen Dienst, den ich erhalten eine Fehlermeldung wie diese:
java.rmi.ConnectException: Connection refused to host: 192.168.56.1; nested exception is:
java.net.ConnectException: Connection timed out: connect
Dies ist die Hauptklasse für meine 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());
}
}
}
Die wichtigsten für meine Client
Klasse:
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);
}
}
}
Irgendwelche Vorschläge?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Testen, ob die 1099-port zur Verfügung stehen (das bedeutet, dass durch die firewall blockiert wird). Auch Sie hat nicht erwähnt, welches Betriebssystem Sie verwenden, und wenn Sie begann die Registrierung, bevor Sie die Ausführung des Servers.
Diese RMI tutorial erklärt:
Standardmäßig die registry läuft auf port 1099, wie die deine.
Als das tutorial Berichte, öffnen Sie einfach eine Eingabeaufforderung (unter Windows) oder ein shell-terminal (auf einem UNIX-artigen OS) und geben Sie ein:
Für Windows (verwenden javaw starten, wenn nicht verfügbar):
Solaris OS oder Linux:
UPDATE
Bemerkte ich, nach dem Oracle tutorial und mein Projekt von damals, ist, dass in der
Server
Klasse, Sie hat nicht exportiert das Objekt in der RMI-Laufzeitumgebung.Dann sollten Sie Bearbeiten diese Zeilen:
zu:
Weil der Lernprogramm-Berichte:
Auch, wenn Sie den gleichen host für einen RMI-Aufruf, es ist nicht notwendig, die
Client
Klasse:Einfach aufrufen:
Weil Oracle reports:
LocateRegistry.createRegistry(1099)
, so dass: (a) er braucht nicht zu beginnen, Sie an der Befehlszeile; (b) er braucht nicht zu befürchten, dass der port nicht als 1099; und (c) der port verfügbar ist, sonst würde er immer eine BindException eingewickelt in ein ExportException. Nicht-Ausführung einer Dienstleistung nicht dazu führen, dass 'connection timeout'; das gleiche gilt für nicht-exportieren eines remote Objekts; und Sie haben nur zu nennenexportObject()
wenn Ihre Klasse nicht erweiternUnicastRemoteObject
.Vorsichtig sein, über die ports, die dazu führen, dass Sie gesperrt werden könnte für eine firewall, zum Beispiel, wenn Sie arbeiten auf einem sicheren Gebiet wie Sie zu arbeiten oder in der Universität, kann der administrator implementiert haben, einige Schutzmechanismen...
Ich sehe nicht, wie Sie können möglicherweise bekommen, dass die Ausnahme von diesem code. Nach dem code-server und client laufen auf demselben host, und Sie nicht bekommen, Verbindungs-timeouts, in dem gleichen host.
Vorausgesetzt, das ist nicht dein echter code, und Sie sind auf der Suche bis die korrekte Registrierung (host-argument
getRegistry()
), möchte ich Fragen, ob 192.168.56.1 ist die IP-Adresse, die Sie erwarten, um zu sehen, Ihre Netzwerk-Topologie. Es ist eine interne LAN-Adresse und wenn der client außerhalb des LAN sollte es werden versuchen, eine Verbindung zu einem mehrere öffentliche IP-Adresse. Wenn die Adresse nicht, was Sie erwarten, dass ich verweisen Sie auf Element a-1 auf die RMI-FAQ.Beschrieb ich meine Lösung hier java.rmi.ConnectException: Connection refused to host: 127.0.1.1; und hier Kann keine Verbindung zu Tomcat MBeanServer über jconsole in Java6. die Frage war eine der wichtigsten Netzwerk-Problem, aber es könnte passieren an jemand anderen.