java.rmi.ConnectException: Conexão recusada ao 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 

Eu recebo essa exceção quando tento conectar um cliente remoto ao meu servidor. Em ambos, server e client, o hostName para o registryUrl de rmi é o endereço IP público do servidor. Eu também tentei colocar localhost no servidor, mas o erro não muda.

Meu java.policy está definido para conceder todas as conexões para todas as portas e não tenho firewalls ativados no servidor ou no cliente.

Alguma sugestão que poderia ser?

Este é o item A.1 no FAQ do RMI . Você precisa corrigir seu arquivo / etc / hosts ou definir a propriedade java.rmi.server.hostname no servidor.

PROBLEMA RESOLVIDO

Eu tive exatamente o mesmo erro. Quando o object remoto foi vinculado ao rmiregistry, ele foi anexado ao endereço IP de loopback, que obviamente falhará se você tentar invocar um método a partir de um endereço remoto. Para consertar isso, precisamos definir a propriedade java.rmi.server.hostname como o endereço IP onde outros dispositivos podem acessar seu histórico pela rede. Não funciona quando você tenta definir o parâmetro através da JVM. Funcionou para mim apenas adicionando a seguinte linha ao meu código antes de vincular o object ao rmiregistry:

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

Neste caso, o endereço IP na rede local do PC que liga o object remoto no Registro RMI é 192.168.1.2.

Eu encontrei muitos dos Q & A sobre este tema, não nada estava me ajudando – isso é porque o meu problema era mais básico (o que posso dizer que eu não sou um guru de networking :)). Meu endereço IP em / etc / hosts estava incorreto. O que eu tentei incluiu o seguinte para 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 

Meu problema é que eu mudei meu endereço IP há muitos meses, mas nunca atualizei meu arquivo / etc / hosts. parece que, por padrão, o jconsole usa o endereço IP do hostname -i de alguma forma, mesmo que eu estivesse visualizando processos locais. A melhor solução foi simplesmente alterar o arquivo / etc / hosts.

A outra solução que pode funcionar é obter o endereço IP correto em / sbin / ifconfig e usar esse endereço IP ao especificar o endereço IP em, por exemplo, um script catalina.sh:

 -Djava.rmi.server.hostname=ABCD 

Talvez o seu registro não seja criado antes que o cliente tente conectar-se ao seu servidor e isso levaria a essa exceção. No Linux, você pode usar o “netstat” para verificar se o seu remarketing está vinculado à porta correta atribuída no código java.

Se você já tentou modificar etc / hosts e adicionar a propriedade java.rmi.server.hostname também, mas ainda assim o registro está sendo vinculado a 127.0.0.1

o problema para mim foi resolvido depois de definir explicitamente a propriedade System através do código, embora a mesma propriedade não tenha sido escolhida de jvm args

Se você estiver executando em um ambiente Linux, abra o arquivo /etc/hosts.allow adicione a seguinte linha

 ALL 

Curingas

Também verifique o /etc/hostname e /etc/host para ver se pode haver algo errado lá.

Eu tive que mudar meu / etc / host de

 127.0.0.1 localhost 127.0.1.1 AMK 

para

 127.0.0.1 localhost 127.0.0.1 AMK 

também escreveu em ALL no arquivo /etc/hosts.allow que anteriormente estava completamente vazio

Agora tudo funciona

Não sei quão seguro é. você precisa ler mais sobre as possíveis opções do /etc/hosts.allow para fazer algo que requer um toque de segurança.

Isso funciona para mim depois de me livrar de “:: 1” em / etc / hosts.

Quando você quiser se conectar ao servidor remoto com o RMI, você deve adicionar uma propriedade do sistema como:

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

ou adicione a variável de ambiente.

Para mim eu tenho Connection Refused e resolvo adicionando esta linha de código no lado do servidor:

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

Agradeço ao outro cara por me orientar para resolvê-lo.

Intereting Posts