Java.rmi.ConnectException: подключение отказалось от хоста: 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

Я получаю это исключение, когда пытаюсь подключить удаленный клиент к моему серверу. В обоих серверах и клиенте hostName для registryUrl rmi является общедоступным IP-адресом сервера. Я также попытался поставить localhost на сервер, но ошибка не изменилась.

My java.policy настроен на предоставление всех подключений ко всем портам, и у меня нет брандмауэров, включенных на сервере или клиенте.

Любые предложения, которые могут быть?

Ответ 1

Это элемент A.1 в FAQ RMI. Вам нужно либо исправить файл /etc/hosts, либо установить свойство java.rmi.server.hostname на сервере.

Ответ 2

РЕШЕНАЯ ПРОБЛЕМА

У меня была точно такая же ошибка. Когда удаленный объект получил привязку к rmiregistry, он был связан с IP-адресом loopback, который, очевидно, завершится неудачей, если вы попытаетесь вызвать метод с удаленного адреса. Чтобы исправить это, нам нужно установить свойство java.rmi.server.hostname на IP-адрес, где другие устройства могут подключиться к вашей сети через сеть. Он не работает, когда вы пытаетесь установить параметр через JVM. Он работал у меня, просто добавив следующую строку в мой код перед привязкой объекта к rmiregistry:

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

В этом случае IP-адрес локальной сети ПК, связывающий удаленный объект в реестре RMI, - 192.168.1.2.

Ответ 3

Вы можете использовать LocalRegistry, такие как:

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

Ответ 4

Я нашел много Q & A по этой теме, ничто не помогло мне - это потому, что моя проблема была более базовой (что я могу сказать, что я не сетевой гуру:)). Мой IP-адрес в /etc/hosts был неправильным. Я попытался включить 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

Моя проблема заключалась в том, что несколько месяцев назад я изменил свой IP-адрес, но никогда не обновлял файл /etc/hosts. кажется, что по умолчанию jconsole использует имя-i-ip-адрес в некотором роде, хотя я просматривал локальные процессы. Лучшим решением было просто изменить файл /etc/hosts.

Другим решением, которое может работать, является получение вашего правильного IP-адреса из /sbin/ifconfig и использование этого IP-адреса при указании IP-адреса, например, в файле catalina.sh script:

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

Ответ 5

Возможно, ваш rmiregistry не будет создан до того, как клиент попытается подключиться к вашему серверу, и это приведет к этому исключению. В Linux вы можете использовать "netstat", чтобы проверить, что ваш rmiregistry должен быть связан на правом порту, который вы назначили в Java-коде.

Ответ 6

Если вы пробовали модифицировать etc/hosts и добавили свойство java.rmi.server.hostname, но все же реестр привязан к 127.0.0.1

проблема для меня была решена после явного задания свойства System через код, хотя одно и то же свойство не было выбрано из jvm args

Ответ 7

Если вы работаете в среде Linux, откройте файл /etc/hosts.allow добавьте следующую строку

ALL

Подстановочные знаки

Также проверьте /etc/hostname и /etc/host, чтобы убедиться, что там что-то не так.

Мне пришлось изменить / etc / host

127.0.0.1 localhost
127.0.1.1 AMK

к

127.0.0.1 localhost
127.0.0.1 AMK

также написал в ALL в файле /etc/hosts.allow, который был ранее полностью пуст

Теперь все работает

не знают, насколько это безопасно. вам нужно больше узнать о возможных параметрах /etc/hosts.allow, чтобы сделать что-то, что требует безопасности.

Ответ 8

У меня была точно такая же проблема, и моя проблема была в том, что у меня было 2 IP-адреса из 2 разных сетей, настроенных в etc/hosts, как показано ниже.

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

Это должно быть связано с тем, что возник конфликт из-за того, какой IP-адрес будет использоваться для других устройств для доступа к сетевому протоколу.

После того, как я удалил лишнюю запись, которая не требуется, я смог решить проблему.

Так что мой файл etc/hosts содержал только следующую запись.

10.xxx.x.xxx    localhost

Ответ 9

Он работает для меня после избавления от ":: 1" в/etc/hosts.

Ответ 10

В моем случае я не смог отредактировать файл hosts из-за использования компьютера из университета.

Я исправил проблему с запуском rmiregistry в другом порту (вместо 1099) с помощью:

rmiregistry <port>

и затем запустить сервер на этом порту.

Это была в основном ошибка, вызванная занятым портом.

Ответ 11

когда вы хотите подключиться к удаленному серверу с помощью RMI, вы должны добавить системное свойство:

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

или добавить переменную среды.

Для меня я получил Connection Refused и решил его, добавив эту строку кода на стороне сервера:

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

Спасибо другому парню за руководство меня, чтобы решить его.

Ответ 12

В Windows убедитесь, что ваш брандмауэр Windows правильно настроен/отключен. Мне пришлось отключить брандмауэр Windows (потому что я не удосужился его настроить), чтобы заставить работать все, даже когда я тестировал с localhost.