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?
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.
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.
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
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.
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
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é.
Ça marche pour moi, après s'être débarrassé de "::1" dans /etc/hosts.
Vous pouvez utiliser LocalRegistry comme:
Registry rgsty = LocateRegistry.createRegistry(1888); rgsty.rebind("hello", hello);
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.