it-swarm.com.de

java.rmi.ConnectException: Verbindung zum Host abgelehnt: 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.<init>(Socket.Java:425)
    at Java.net.Socket.<init>(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 erhalte 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 gewährt werden, und auf dem Server oder Client sind keine Firewalls aktiviert.

Irgendwelche Vorschläge, was könnte sein?

38
antonbalboa

Dies ist Punkt A.1 im RMI FAQ . Sie müssen entweder die Datei/etc/hosts korrigieren oder die Java.rmi.server.hostname -Eigenschaft auf dem Server festlegen.

27
user207421

PROBLEM BEHOBEN

Ich hatte genau den gleichen Fehler. Wenn das Remote-Objekt an die Rmiregistry gebunden wurde, wurde ihm die Loopback-IP-Adresse zugewiesen, die offensichtlich fehlschlägt, wenn Sie versuchen, eine Methode von einer Remote-Adresse aufzurufen. Um dies zu beheben, müssen wir die Eigenschaft Java.rmi.server.hostname auf die IP-Adresse setzen, über die andere Geräte Ihre Rmiregistry über das Netzwerk erreichen können. Es funktioniert nicht, wenn Sie versuchen, den Parameter über die JVM festzulegen. Es hat bei mir funktioniert einfach durch Hinzufügen der folgenden Zeile zu meinem Code, bevor das Objekt an die Rmiregistry gebunden wird:

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

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

13

Ich habe viele Fragen und Antworten zu diesem Thema gefunden, nichts half mir - das liegt daran, dass mein Problem eher grundlegend war (was kann ich sagen, ich bin kein Networking-Guru :)). Meine IP-Adresse in/etc/hosts war falsch. Was ich versucht hatte, 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=A.B.C.D"  #howeverI put the wrong ip here!

export CATALINA_OPTS

Mein Problem war, dass ich meine IP-Adresse vor vielen Monaten geändert hatte, meine/etc/hosts -Datei jedoch nie aktualisiert hatte. Es scheint, dass jconsole standardmäßig den hostnamen -i IP-Adresse verwendet, obwohl ich lokale Prozesse angesehen habe. Die beste Lösung war, 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 in einem catalina.sh-Skript angeben:

-Djava.rmi.server.hostname=A.B.C.D
6
Paul

Möglicherweise wird Ihr Protokoll nicht erstellt, bevor der Client versucht, eine Verbindung zu Ihrem Server herzustellen, und dies würde zu dieser Ausnahme führen. Linux kann mit "netstat" überprüft werden, ob das Protokoll auf dem richtigen Port, den Sie im Java-Code zugewiesen haben, bindet.

3
CJeremy

Wenn Sie versucht haben, etc/hosts zu ändern und die Eigenschaft Java.rmi.server.hostname ebenfalls hinzuzufügen, die Registrierung jedoch immer noch an 127.0.0.1 gebunden ist

das Problem wurde für mich behoben, nachdem die Systemeigenschaft explizit durch Code festgelegt wurde, obwohl dieselbe Eigenschaft nicht von Jvm Args ausgewählt wurde

2
SVashisth

sie können LocalRegistry wie verwenden:

Registry rgsty = LocateRegistry.createRegistry(1888); rgsty.rebind("hello", hello);

2
Jianxing Fan

Ich hatte das gleiche Problem und mein Problem war, dass ich 2 IP-Adressen aus 2 verschiedenen Netzwerken in den etc/hosts konfiguriert hatte, wie unten angegeben.

10.xxx.x.xxx    localhost
192.xxx.x.xxx   localhost

Dies sollte darauf zurückzuführen sein, dass es einen Konflikt gab, welche IP-Adresse für die anderen Geräte verwendet werden soll, um über das Netzwerk die Funkdatenbank zu erreichen.

Nachdem ich die nicht benötigte zusätzliche Platte entfernt hatte, konnte ich das Problem lösen.

Meine etc/hosts-Datei hatte also nur den folgenden Datensatz.

10.xxx.x.xxx    localhost
1
Dinu94

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

ALL

Wildcards

Überprüfen Sie auch /etc/hostname und /etc/Host, um festzustellen, ob dort etwas nicht stimmt.

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 zuvor vollständig leere Datei /etc/hosts.allow

Jetzt funktioniert alles

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 einen Hauch von Sicherheit erfordert.

1
Ar maj

Nach dem Entfernen von ":: 1" in/etc/hosts funktioniert es für mich.

0
Joshua

Stellen Sie unter Windows sicher, dass Ihre Windows-Firewall richtig konfiguriert/deaktiviert ist. Ich musste die Windows-Firewall deaktivieren (weil ich mich nicht mit der Konfiguration beschäftigt habe), damit die Dinge auch dann funktionieren, wenn ich mit localhost teste.

0
Dula

In meinem Fall konnte ich die Hosts-Datei nicht bearbeiten, weil ich einen PC von der Universität verwendet habe.

Ich habe das Problem beim Ausführen von rmiregistry in einem anderen Port (statt 1099) behoben mit:

rmiregistry <port>

und dann den Server an diesem Port ausführen.

Es war im Grunde ein Fehler, der durch den belegten Port verursacht wurde.

0