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.run(Transport.java:177)
    at sun.rmi.transport.Transport.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

j'obtiens cette exception quand j'essaie de connecter un client distant à mon serveur. Dans les deux cas, serveur et client, le nom d'hôte du registryUrl de rmi est l'adresse IP publique du serveur. J'ai aussi essayé de mettre localhost dans le serveur, mais l'erreur ne change pas.

mon java.la politique est définie pour accorder toutes les connexions à tous les ports et je n'ai pas de pare-feu activé dans le serveur ou le client.

des suggestions de ce qui pourrait être?

36
demandé sur Mateusz Piotrowski 2013-03-28 19:22:27

9 réponses

C'est item A. 1 in the RMI FAQ. Vous devez corriger votre fichier /etc/hosts ou définissez java.rmi.server.hostname propriété du serveur.

25
répondu user207421 2013-03-29 01:33:27

PROBLÈME RÉSOLU

j'ai eu exactement la même erreur. Lorsque l'objet distant a été relié au rmiregistry, il a été attaché avec L'adresse IP loopback qui échouera évidemment si vous essayez d'invoquer une méthode à partir d'une adresse distante. Pour corriger cela, nous devons définir le java.rmi.serveur.nom d'hôte propriété de l'adresse IP où d'autres appareils peuvent atteindre votre rmiregistry sur le réseau. Il ne fonctionne pas lorsque vous essayez de définir le paramètre à travers le JVM. Il a travaillé pour moi juste en ajoutant la ligne suivante à mon code juste avant de lier l'objet au rmiregistry:

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

dans ce cas, l'adresse IP sur le réseau local du PC liant l'objet distant sur le Registre RMI est 192.168.1.2.

11
répondu Raydelto Hernandez 2015-03-02 00:25:16

j'ai trouvé beaucoup de questions et Réponses sur ce sujet, pas rien ne m'aidait - c'est parce que mon problème était plus basique ( qu'est-ce que je peux dire Je ne suis pas un gourou du réseautage :) ). Mon adresse ip dans /etc/hosts était incorrecte. Ce que j'avais essayé incluait ce qui suit 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é mon adresse ip il y a plusieurs mois, mais jamais mis à jour mon fichier /etc/hosts. il semble que par défaut le jconsole utilise l'adresse ip hostname-I d'une manière ou d'une autre, même si Je regardais les processus locaux. La meilleure solution était simplement de changer le fichier /etc/hosts.

l'autre solution qui peut fonctionner est d'obtenir votre adresse ip correcte à partir de / sbin / ifconfig et d'utiliser cette adresse ip en spécifiant l'adresse ip dans, par exemple, un catalina.sh script:

-Djava.rmi.server.hostname=A.B.C.D
6
répondu Paul 2014-03-06 14:37:06

peut-être que votre rmiregistry ne sera pas créé avant que le client essaie de se connecter à votre serveur et cela conduirait à cette exception.Sous Linux, vous pouvez utiliser" netstat " pour vérifier votre lien rmiregistry be Sur le bon port que vous avez assigné en code java.

3
répondu CJeremy 2013-08-09 01:50:12

si vous avez essayé de modifier etc / hosts et d'ajouter java.rmi.serveur.la propriété hostname aussi, mais le registre est encore lié à 127.0.0.1

le problème pour moi a été résolu après avoir défini explicitement la propriété du système par le code bien que la même propriété n'ait pas été sélectionnée à partir de JVM args

2
répondu SVashisth 2014-07-28 12:18:00

si vous utilisez Linux, ouvrez le fichier /etc/hosts.allow ajoutez la ligne suivante

ALL

Jokers

vérifiez aussi le /etc/hostname et /etc/host pour voir si quelque chose ne va pas là-bas.

j'ai dû changer ma / etc / host

127.0.0.1 localhost
127.0.1.1 AMK

127.0.0.1 localhost
127.0.0.1 AMK

aussi écrit en ALL dans le fichier /etc/hosts.allow qui était auparavant complètement vide

Maintenant tout fonctionne

Je ne sais pas si c'est Sécuritaire. vous devez en savoir plus sur les options possibles pour /etc/hosts.allow pour faire quelque chose qui nécessite un contact de sécurité.

1
répondu Ar maj 2016-09-06 21:51:38

Ça marche pour moi, après s'être débarrassé de "::1" dans /etc/hosts.

0
répondu Joshua 2016-10-13 08:17:44

Vous pouvez utiliser LocalRegistry comme:

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

0
répondu Jianxing Fan 2018-09-28 09:45:35

quand vous voulez vous connecter au serveur distant avec RMI vous devez ajouter une propriété système identique à:

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

ou ajouter une variable d'environnement.

Pour moi, j'ai eu Connexion Refusée et résolvez-le en ajoutant cette ligne de code du côté du serveur:

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

merci à l'autre gars pour m'avoir guidé pour le résoudre.

-1
répondu Saman Salehi 2017-09-13 05:49:47