java.rmi.ConnectException: Verbindung verweigert zum Host: 127.0.1.1;

java.rmi.ConnectException: Connection refused to host: 127.0.1.1; nested exception is: java.net.ConnectException: Connection refused at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:619) at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216) at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202) at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:128) at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:194) at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:148) at com.sun.proxy.$Proxy0.notifyMe(Unknown Source) at CallbackServerImpl.doCallback(CallbackServerImpl.java:149) at CallbackServerImpl.registerForCallback(CallbackServerImpl.java:70) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:322) at sun.rmi.transport.Transport$1.run(Transport.java:177) at sun.rmi.transport.Transport$1.run(Transport.java:174) at java.security.AccessController.doPrivileged(Native Method) at sun.rmi.transport.Transport.serviceCall(Transport.java:173) at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:553) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:808) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:667) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:722) Caused by: java.net.ConnectException: Connection refused at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391) at java.net.Socket.connect(Socket.java:579) at java.net.Socket.connect(Socket.java:528) at java.net.Socket.(Socket.java:425) at java.net.Socket.(Socket.java:208) at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:40) at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:146) at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:613) ... 23 more 

Ich bekomme diese Ausnahme, wenn ich versuche, einen Remote-Client mit meinem Server zu verbinden. In Server und Client ist der Hostname für die RegistryUrl von rmi die öffentliche IP-Adresse des Servers. Ich habe auch versucht, localhost in Server zu setzen, aber der Fehler ändert sich nicht.

Meine java.policy ist so eingestellt, dass alle Verbindungen zu allen Ports zugelassen werden und ich keine Firewalls auf dem Server oder dem Client aktiviert habe.

Irgendwelche Vorschläge, was sein könnte?

Dies ist Punkt A.1 in den RMI FAQ . Sie müssen entweder die Datei / etc / hosts reparieren oder die Eigenschaft java.rmi.server.hostname auf dem Server java.rmi.server.hostname .

PROBLEM GELÖST

Ich hatte genau den gleichen Fehler. Wenn das Remote-Objekt an rmiregistry gebunden wurde, wurde es mit der Loopback-IP-Adresse verknüpft, die offensichtlich fehlschlägt, wenn Sie versuchen, eine Methode von einer Remote-Adresse aus aufzurufen. Um dies zu beheben, müssen wir die Eigenschaft java.rmi.server.hostname auf die IP-Adresse setzen, über die andere Geräte über das Netzwerk auf Ihre Infrastruktur zugreifen können. Es funktioniert nicht, wenn Sie versuchen, den Parameter über die JVM festzulegen. Es funktionierte für mich, indem ich die folgende Zeile zu meinem Code hinzufügte, bevor ich das Objekt an rmiregistry gebunden habe:

System.setProperty("java.rmi.server.hostname","192.168.1.2");

In diesem Fall ist die IP-Adresse im lokalen Netzwerk des PCs, der das entfernte Objekt in der RMI-Registrierung bindet, 192.168.1.2.

Ich fand viele der Fragen und Antworten zu diesem Thema, nicht nichts half mir – das ist, weil mein Problem einfacher war (was kann ich sagen, ich bin kein Netzwerk-Guru :)). Meine IP-Adresse in / etc / hosts war falsch. Was ich versucht habe, beinhaltete folgendes für CATALINA_OPTS:

 CATALINA_OPTS="$CATALINA_OPTS -Djava.awt.headless=true -Xmx128M -server -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=7091 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=ABCD" #howeverI put the wrong ip here! export CATALINA_OPTS 

Mein Problem war, dass ich meine IP Adresse vor vielen Monaten geändert hatte, aber nie meine / etc / hosts Datei aktualisiert hatte. es scheint, dass die jconsole standardmäßig den Hostnamen -i IP-Adresse in irgendeiner Weise verwendet, obwohl ich lokale processe sah. Die beste Lösung bestand darin, einfach die Datei / etc / hosts zu ändern.

Die andere Lösung, die funktionieren kann, besteht darin, Ihre korrekte IP-Adresse von / sbin / ifconfig abzurufen und diese IP-Adresse zu verwenden, wenn Sie die IP-Adresse zum Beispiel in einem catalina.sh-Skript angeben:

 -Djava.rmi.server.hostname=ABCD 

Möglicherweise wird Ihre Registrierung nicht erstellt, bevor der Client versucht, eine Verbindung zu Ihrem Server herzustellen, und es würde zu dieser Ausnahme führen. In Linux können Sie “netstat” verwenden, um Ihre Verbindung auf dem richtigen Port in Java-Code zu überprüfen.

Wenn Sie versucht haben, etc / hosts zu ändern und die Eigenschaft java.rmi.server.hostname ebenfalls hinzuzufügen, wird die Registrierung dennoch an 127.0.0.1 gebunden

Das Problem für mich wurde behoben, nachdem explizit die Systemeigenschaft über Code festgelegt wurde, obwohl dieselbe Eigenschaft nicht aus jvm args ausgewählt wurde

Wenn Sie in einer Linux-Umgebung arbeiten, öffnen Sie die Datei /etc/hosts.allow fügen Sie die folgende Zeile hinzu

 ALL 

Platzhalter

Überprüfen Sie auch den /etc/hostname und /etc/host zu sehen, ob dort etwas falsch ist.

Ich musste meinen / etc / host von ändern

 127.0.0.1 localhost 127.0.1.1 AMK 

zu

 127.0.0.1 localhost 127.0.0.1 AMK 

schrieb auch in ALL in die Datei /etc/hosts.allow die vorher komplett leer war

Jetzt funktioniert alles

Ich weiß nicht, wie sicher es ist. Sie müssen mehr über mögliche Optionen für /etc/hosts.allow lesen, um etwas zu tun, das ein wenig Sicherheit erfordert.

Es funktioniert für mich, nachdem ich “:: 1” in / etc / hosts losgeworden bin.

Wenn Sie mit RMI eine Verbindung zum Remote-Server herstellen möchten, müssen Sie eine Systemeigenschaft hinzufügen, die wie folgt lautet :

 System.setProperty("java.rmi.server.hostname","Ip or DNS of the server"); 

oder fügen Sie eine Umgebungsvariable hinzu.

Für mich habe ich Connection Refused bekommen und löse es, indem ich diese Codezeile serverseitig hinzufüge:

  java -jar -Djava.rmi.server.hostname="ip or dns of the server" packageName.jar 

Danke an anderen Kerl für mich, um es zu lösen.