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
Je reçois cette exception lorsque j'essaie de connecter un client distant à mon serveur. Dans les deux cas, serveur et client, le nom d'hôte pour le registryUrl de rmi est l'adresse IP publique du serveur. J'ai également essayé de mettre localhost dans le serveur mais l'erreur ne change pas.
Mon Java.policy est configuré pour accorder toutes les connexions à tous les ports et aucun pare-feu n’est activé sur le serveur ou le client.
Des suggestions que pourrait être?
Ceci est le point A.1 dans le RMI FAQ . Vous devez corriger votre fichier/etc/hosts ou définir la propriété Java.rmi.server.hostname
sur le serveur.
J'ai trouvé beaucoup de questions et réponses sur ce sujet, rien ne m'aidait, c'est parce que mon problème était plus fondamental (que puis-je dire que je ne suis pas un gourou du réseautage :)). Mon adresse IP dans/etc/hosts était incorrecte. Ce que j'avais essayé incluait les éléments suivants pour 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
Mon problème était que j'avais changé d'adresse IP plusieurs mois auparavant, mais que je n'avais jamais mis à jour mon fichier/etc/hosts. il semble que par défaut, jconsole utilise le nom d’hôte -i adresse IP d’une manière ou d’une autre, même si je visionnais les processus locaux. La meilleure solution consistait simplement à modifier le fichier/etc/hosts.
L'autre solution qui peut fonctionner consiste à obtenir votre adresse IP correcte auprès de/sbin/ifconfig et à utiliser cette adresse IP lors de la spécification de l'adresse IP, par exemple dans un script catalina.sh:
-Djava.rmi.server.hostname=A.B.C.D
Peut-être que votre rmiregistry ne sera pas créé avant que le client tente de se connecter à votre serveur, ce qui entraînerait cette exception. Sous Linux, vous pouvez utiliser "netstat" pour vérifier que votre rmiregistry est bien connecté au bon port que vous avez attribué en code Java.
Si vous avez essayé de modifier etc/hosts et d'ajouter la propriété Java.rmi.server.hostname également, mais que le registre est toujours lié à 127.0.0.1
le problème pour moi a été résolu après la définition explicite de la propriété System par le code, bien que la même propriété n'ait pas été sélectionnée dans jvm args
vous pouvez utiliser LocalRegistry comme:
Registry rgsty = LocateRegistry.createRegistry(1888); rgsty.rebind("hello", hello);
J'ai eu exactement le même problème et mon problème était que j'avais 2 adresses IP de 2 réseaux différents configurés dans les hôtes etc/comme ci-dessous.
10.xxx.x.xxx localhost
192.xxx.x.xxx localhost
Cela devrait être dû au fait qu'il y avait un conflit sur l'adresse IP à utiliser pour que les autres périphériques atteignent la hiérarchie sur le réseau.
Une fois que j'ai supprimé l'enregistrement supplémentaire qui n'est pas nécessaire, j'ai pu résoudre le problème.
Donc, mon fichier etc/hosts n'a que l'enregistrement suivant.
10.xxx.x.xxx localhost
Si vous utilisez un environnement Linux, ouvrez le fichier /etc/hosts.allow
Ajoutez la ligne suivante
ALL
Vérifiez également les /etc/hostname
et /etc/Host
pour voir s’il ya un problème.
Je devais changer mon / etc / Host
de
127.0.0.1 localhost
127.0.1.1 AMK
à
127.0.0.1 localhost
127.0.0.1 AMK
a aussi écrit dans ALL
dans le fichier /etc/hosts.allow
qui était auparavant complètement vide
je ne sais pas à quel point c'est sécuritaire. vous devez en savoir plus sur les options possibles pour /etc/hosts.allow
pour faire quelque chose qui nécessite une touche de sécurité.
Cela fonctionne pour moi après avoir éliminé ":: 1" dans/etc/hosts.
Sous Windows, assurez-vous que votre pare-feu Windows est correctement configuré/désactivé. J'ai dû désactiver le pare-feu Windows (car je ne me suis pas préoccupé de le configurer) pour que tout fonctionne, même lorsque je testais avec localhost.