Warum RMI localhost-client verwendet eine keine localhost-ip verbinden, den RMI-server localhost

Sind wir mit einem client/server, RMI-Kommunikation auf dem gleichen Rechner (also alle sollte die ip "localhost").

Starten wir die Registrierung (mithilfe der Standard-port 1099)


registry = LocateRegistry.createRegistry(port);

- und export-einige Objekte, die RMI-registry


Naming.rebind("//" + "localhost" + ":" + port + "/" + name, object);

Aus einem anderen Prozess, den wir abrufen, einige Objekte (alles erinnern, was läuft in localhost)


MyRemoteObject ro = (MyRemoteObject) Naming.lookup("//" + "localhost" + ":" + port + "/" + name);

Das Problem passiert, wenn Sie die app ausführen, beginnend mit dem lokalen Netzwerk arbeiten, und in der Mitte der Prozess, den Sie deaktivieren Sie die Netzwerkverbindung.
Wenn Sie die app laufen und die LAN ist arbeiten kein Problem popup, und wenn Sie die app laufen und die LAN nicht funktioniert ist kein Problem-popup. Es passiert einfach, wenn Sie ändern Sie die LAN-während der Ausführung der app.

Geworfene Ausnahme während der Ausführung zu Benennen.lookup () - Methode ist diese hier:


java.lang.RuntimeException: java.rmi.ConnectIOException: Exception creating connection to: 192.168.x.x; nested exception is:
java.net.NoRouteToHostException: No route to host: connect

Debugging-ein kleines bisschen fand ich heraus, dass die

RemoteObject ($Proxy0) -> RemoteObjectInvocationHandler -> UnicastRef2 -> LiveRef -> TCPEndpoint

hatte die ip des host (z.B.: 192.168.x.x) anstelle von "localhost" oder "127.0.0.1" (was wäre es, was ich wollte).
Und die isLocal boolean der liveRef Objekt ist immer falsch.

Ich weiß nicht, ob es klar genug. Sorry!!!

Haben Sie irgendwelche Vorschläge?

Meine Versuche:

Habe ich versucht, diese Lösungen

  1. Ausführen der jvm mit -Djava.rmi.server.hostname=localhost argument
  2. Neu definieren RMIServerSocketFactory zurück 127.0.0.1 everytime. (TCPEndpoint hat 192.168.x.x ip und isLocal ist immer false)
  3. Nennen binden und Suche kein host in der URI. Dies soll bedeuten localhost.

aber keiner von Ihnen gearbeitet haben.

Jede Anregung willkommen sein wird.

InformationsquelleAutor RMI-thinker | 2010-11-23

Schreibe einen Kommentar