Rmi connexion refusée par localhost
J'ai un problème à l'aide de java rmi:
Quand je suis en train de lancer mon serveur, j'obtiens un connectException (voir ci-dessous).
Exception se produit lors de l'exécution de la relier méthode:
Runtime.getRuntime().exec("rmiregistry 2020");
MyServer server = new MyServer();
Naming.rebind("//localhost:2020/RemoteDataPointHandler", server);
lors de l'utilisation de rmi://localhost:2020/RemoteDataPointHandler au lieu de cela, il ne fonctionne pas non plus. Aussi en utilisant le port par défaut ne fonctionne pas. J'ai aussi essayé d'utiliser le 127.0.0.1 adresse ip, mais avec le même effet.
mon runtime args:
-Djava.security.policy=java.security.AllPermission
Exception in thread "main" java.rmi.ConnectException: Connexion refusée à l'hôte: localhost; nested exception est la suivante: java.net.ConnectException: Connexion refusée au coucher du soleil.rmi.de transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:574) au coucher du soleil.rmi.de transport.tcp.TCPChannel.createConnection(TCPChannel.java:185) au coucher du soleil.rmi.de transport.tcp.TCPChannel.newConnection(TCPChannel.java:171) au coucher du soleil.rmi.serveur.UnicastRef.newCall(UnicastRef.java:306) au coucher du soleil.rmi.de registre.RegistryImpl_Stub.rebind(Source Inconnue) à java.rmi.De nommage.rebind(Nommage.java:160) à être.fortega.knx.serveur.Principal.(Principale.java:25) à être.fortega.knx.serveur.Principal.principale(Main.java:16) Causés par: java.net.ConnectException: Connexion refusée à java.net.PlainSocketImpl.socketConnect(Native method) à java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) à java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195) à java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182) à java.net.SocksSocketImpl.connect(SocksSocketImpl.java:433) à java.net.Socket.connect(Socket.java:524) à java.net.Socket.connect(Socket.java:474) à java.net.Socket.(Socket.java:371) à java.net.Socket.(Socket.java:184) au coucher du soleil.rmi.de transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:22) au coucher du soleil.rmi.de transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:128) au coucher du soleil.rmi.de transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:569) ... 7 plus
Je dirais que vous avez un problème de synchronisation ici. Le Registre n'a pas tout a commencé quand vous ne les relier.
OriginalL'auteur Fortega | 2009-12-01
Vous devez vous connecter pour publier un commentaire.
avait une) des nouvelles de problème avec ça exception de connexion. il est jeté, soit lorsque le registre n'est pas encore commencé (comme dans votre cas) ou lorsque le registre est déjà désexporter (comme dans mon cas).
mais un petit commentaire à la différence entre les 2 modes de démarrage le registre:
exécute le rmiregistry.exe dans javas bin-répertoire dans un nouveau processus et continue en parallèle avec votre code java.
le rmi appel de la méthode commence le registre, renvoie la référence à ce registre à distance de l'objet, puis se poursuit avec l'instruction suivante.
dans votre cas, le registre n'est pas commencé dans le temps lorsque vous essayez de lier votre objet
OriginalL'auteur AxelTheGerman
Il semble fonctionner lorsque je remplace le
par
quelqu'un à une idée pourquoi? Quelle est la différence?
OriginalL'auteur Fortega
Vous avez besoin d'avoir un
rmiregistry
en cours d'exécution avant la tentative de connexion (s'inscrire) un RMI de service avec elle.La
LocateRegistry.createRegistry(2020)
appel de méthode crée et les exportations d'un registre sur le numéro de port spécifié.Consultez la documentation de LocateRegistry
OriginalL'auteur Steen
Une différence, on remarque dans Windows est:
Si vous utilisez
Runtime.getRuntime().exec("rmiregistry 1024");
vous pouvez le voir rmiregistry.exe processus est exécuté dans votre Gestionnaire de Tâches
alors que si vous utilisez
Registry registry = LocateRegistry.createRegistry(1024);
vous ne pouvez pas voir le processus en cours d'exécution dans le Gestionnaire des Tâches,
Je pense que Java gère d'une manière différente.
et c'est mon serveur.la politique de fichier
Avant l'exécution de l'application, assurez-vous que vous avez tué tous vos
javaw.exe et rmiregistry.exe correspond à votre rmi programmes qui sont
déjà en cours d'exécution.
Le code suivant fonctionne pour moi en utilisant
Registry.LocateRegistry()
ouVM argument
Code:
OriginalL'auteur user1008532
il semble que vous devez régler votre commande par un
String[]
,par exemple:comme le style de
main(String[] args)
.OriginalL'auteur user1613007