refused - run rmi java
java.rmi.ConnectException: Connection se negó a alojar: 127.0.1.1; (8)
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
Obtengo esta excepción cuando trato de conectar un cliente remoto a mi servidor. En ambos, servidor y cliente, el nombre de host para el registryUrl de rmi es la dirección IP pública del servidor. También traté de poner localhost en el servidor, pero el error no cambia.
Mi java.policy está configurado para otorgar todas las conexiones a todos los puertos y no tengo firewalls habilitados en el servidor o el cliente.
¿Alguna sugerencia de lo que podría ser?
Encontré muchas de las preguntas y respuestas sobre este tema, nada me ayudaba, porque mi problema era más básico (¿qué puedo decir que no soy un gurú de redes sociales?). Mi dirección IP en / etc / hosts era incorrecta. Lo que intenté incluir fue lo siguiente 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=A.B.C.D" #howeverI put the wrong ip here!
export CATALINA_OPTS
Mi problema era que había cambiado mi dirección IP hace muchos meses, pero nunca actualicé mi archivo / etc / hosts. parece que, de forma predeterminada, jconsole utiliza el nombre de host -i dirección IP de alguna manera, aunque estaba viendo procesos locales. La mejor solución fue simplemente cambiar el archivo / etc / hosts.
La otra solución que puede funcionar es obtener su dirección IP correcta de / sbin / ifconfig y usar esa dirección IP al especificar la dirección IP en, por ejemplo, un script catalina.sh:
-Djava.rmi.server.hostname=A.B.C.D
Este es el elemento A.1 en las preguntas frecuentes de RMI . Debe corregir su archivo / etc / hosts o establecer la propiedad java.rmi.server.hostname
en el servidor.
Funciona para mí después de deshacerme de ":: 1" en / etc / hosts.
Quizás su rmiregistry no se cree antes de que el cliente intente conectarse a su servidor y esto llevaría a esta excepción. En Linux, puede usar "netstat" para verificar que su enlace esté enlazado en el puerto correcto que asignó en el código java.
Si está ejecutando en un entorno Linux, abra el archivo /etc/hosts.allow
agregue la siguiente línea
ALL
Wildcards
También verifique el /etc/hostname
y /etc/host
para ver si hay algún problema allí.
Tuve que cambiar mi / etc / host
de
127.0.0.1 localhost
127.0.1.1 AMK
a
127.0.0.1 localhost
127.0.0.1 AMK
también escribió ALL
en el archivo /etc/hosts.allow
que anteriormente estaba completamente vacío
Ahora todo funciona
no sé qué tan seguro es debe leer más acerca de las posibles opciones para /etc/hosts.allow
para hacer algo que requiera un toque de seguridad.
Si ha intentado modificar etc / hosts y agregar la propiedad java.rmi.server.hostname también, pero el registro se está enlazando a 127.0.0.1
el problema para mí se resolvió después de establecer explícitamente la propiedad del sistema a través del código, aunque la misma propiedad no se eligió de jvm args
cuando desee conectarse al servidor remoto con RMI , debe agregar una propiedad del sistema igual a:
System.setProperty("java.rmi.server.hostname","Ip or DNS of the server");
o agregue una variable de entorno.
Para mí recibí Connection Refused y lo resolví agregando esta línea de código en el servidor:
java -jar -Djava.rmi.server.hostname="ip or dns of the server" packageName.jar
Gracias a otro chico por guiarme para resolverlo.
PROBLEMA RESUELTO
Tenía exactamente el mismo error. Cuando el objeto remoto se vinculó al rmiregistry, se adjuntó con la dirección IP loopback, que obviamente fallará si intenta invocar un método desde una dirección remota. Para solucionar esto, necesitamos establecer la propiedad java.rmi.server.hostname en la dirección IP donde otros dispositivos pueden llegar a su rmiregistry a través de la red. No funciona cuando intenta establecer el parámetro a través de la JVM. Funcionó para mí simplemente agregando la siguiente línea a mi código justo antes de vincular el objeto al rmiregistry:
System.setProperty("java.rmi.server.hostname","192.168.1.2");
En este caso, la dirección IP en la red local de la PC que vincula el objeto remoto en el Registro RMI es 192.168.1.2.