web-dev-qa-db-fra.com

java.rmi.ConnectException: connexion refusée à l'hôte: 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

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?

38
antonbalboa

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.

27
user207421

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
6
Paul

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.

3
CJeremy

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

2
SVashisth

vous pouvez utiliser LocalRegistry comme:

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

2
Jianxing Fan

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
1
Dinu94

Si vous utilisez un environnement Linux, ouvrez le fichier /etc/hosts.allow Ajoutez la ligne suivante

ALL

Wildcards

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

Maintenant tout fonctionne

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é.

1
Ar maj

Cela fonctionne pour moi après avoir éliminé ":: 1" dans/etc/hosts.

0
Joshua

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.

0
Dula