java.rmi.ConnectException: Connection refused to 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.<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

Dostaję ten wyjątek, gdy próbuję połączyć zdalnego klienta z moim serwerem. W obu przypadkach, serwer i klient nazwa hosta dla registryUrl rmi jest publicznym adresem IP serwera. Próbowałem również umieścić localhost na serwerze, ale błąd się nie zmienia.

Moja java.zasada jest ustawiona tak, aby przyznawać wszystkie połączenia do wszystkich portów i nie mam włączonej zapory sieciowej na serwerze lub kliencie.

Jakieś sugestie, co może być?

Author: Mateusz Piotrowski, 2013-03-28

9 answers

To jest pozycja A. 1 w RMI FAQ . Musisz naprawić plik/etc / hosts lub ustawić właściwość java.rmi.server.hostname Na serwerze.

 25
Author: user207421,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-29 01:33:27

PROBLEM ROZWIĄZANY

Miałem dokładnie ten sam błąd. Kiedy zdalny obiekt został przypisany do rmiregistry, został dołączony z adresem IP loopback, co oczywiście nie powiedzie się, jeśli spróbujesz wywołać metodę ze zdalnego adresu. Aby to naprawić, musimy ustawić java.rmi.serwer.hostname właściwość do adresu IP, pod którym inne urządzenia mogą dotrzeć do Twojej rmiregistry przez sieć. Nie działa, gdy próbujesz ustawić parametr za pomocą JVM. zadziałało dla mnie wystarczy dodać następujący wiersz do mojego kodu tuż przed powiązaniem obiektu z rmiregistry:

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

W tym przypadku adres IP w sieci lokalnej komputera wiążącego obiekt zdalny w rejestrze RMI to 192.168.1.2.

 11
Author: Raydelto Hernandez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-02 00:25:16

Znalazłem wiele pytań na ten temat, nic mi nie pomagało - to dlatego, że mój problem był bardziej podstawowy (co mogę powiedzieć, że nie jestem guru sieci :)). Mój adres ip w /etc / hosts był nieprawidłowy. To, co próbowałem, zawiera następujące dla 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

Mój problem polegał na tym, że wiele miesięcy temu zmieniłem swój adres ip, ale nigdy nie zaktualizowałem pliku/etc / hosts. wydaje się, że domyślnie jconsole używa adresu IP hostname-i w jakiś sposób, mimo że byłem przeglądanie procesów lokalnych. Najlepszym rozwiązaniem była prosta zmiana pliku/etc / hosts.

Innym rozwiązaniem, które może zadziałać, jest pobranie poprawnego adresu ip z /sbin / ifconfig i użycie tego adresu IP podczas określania adresu ip na przykład w catalina.sh skrypt:

-Djava.rmi.server.hostname=A.B.C.D
 6
Author: Paul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-06 14:37:06

Może twoje rmiregistry nie zostaną utworzone przed próbą połączenia się klienta z serwerem i doprowadziłoby to do tego exception.In Linux, możesz użyć "netstat", aby sprawdzić, czy twój rmiregistry jest bond na prawym porcie przypisanym w kodzie java.

 3
Author: CJeremy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-09 01:50:12

Jeśli próbowałeś zmodyfikować etc / hosts i dodać Javę.rmi.serwer.właściwość hostname, ale nadal rejestr jest związany z 127.0.0.1

Problem dla mnie został rozwiązany po jawnym ustawieniu właściwości systemowej za pomocą kodu, chociaż ta sama właściwość nie została wybrana z JVM args

 2
Author: SVashisth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-28 12:18:00

Jeśli używasz środowiska Linux, otwórz plik /etc/hosts.allow Dodaj następujący wiersz

ALL

Wildcards

Sprawdź również /etc/hostname i /etc/host, aby sprawdzić, czy coś tam nie jest tak.

Musiałem zmienić moje / etc / host z

127.0.0.1 localhost
127.0.1.1 AMK

Do

127.0.0.1 localhost
127.0.0.1 AMK

Napisał również w ALL w pliku /etc/hosts.allow, który wcześniej był całkowicie pusty

Teraz wszystko działa

Nie wiem, jak to jest bezpieczne. musisz przeczytać więcej o możliwe opcje dla /etc/hosts.allow, aby zrobić coś, co wymaga odrobiny bezpieczeństwa.

 1
Author: Ar maj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-06 21:51:38

Działa u mnie po pozbyciu się":: 1 " w /etc / hosts.

 0
Author: Joshua,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-13 08:17:44

Możesz użyć LocalRegistry, takich jak:

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

 0
Author: Jianxing Fan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-28 09:45:35

Jeśli chcesz połączyć się ze zdalnym serwerem za pomocą RMI musisz dodać właściwość systemową taką samą jak:

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

Lub dodać zmienną środowiskową.

Dla mnie mam Połączenie odrzucone i rozwiąż to dodając tę linijkę kodu po stronie serwera:

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

Dziękuję drugiemu facetowi za poprowadzenie mnie do rozwiązania tego problemu.

 -1
Author: Saman Salehi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-13 05:49:47