Rmi-Verbindung abgelehnt durch localhost
Ich habe ein problem mit java rmi:
Wenn ich versuche zu laufen, mein server, ich bekomme eine connectException (siehe unten).
Ausnahme passiert, wenn die Ausführung der rebind-Methode:
Runtime.getRuntime().exec("rmiregistry 2020");
MyServer server = new MyServer();
Naming.rebind("//localhost:2020/RemoteDataPointHandler", server);
bei der Verwendung von rmi://localhost:2020/RemoteDataPointHandler anstelle, es funktioniert nicht, entweder. Auch unter Verwendung der Standard-port nicht funktioniert. Ich habe auch versucht mit der 127.0.0.1 ip-Adresse, aber mit der gleichen Wirkung.
meine Laufzeit args:
-Djava.security.policy=java.security.AllPermission
Exception in thread "main" java.rmi.ConnectException: Connection refused to host: localhost; nested exception is: java.net.ConnectException: Connection refused bei der sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:574) bei der sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:185) bei der sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:171) bei der sun.rmi.server.UnicastRef.newCall(UnicastRef.java:306) bei der sun.rmi.Registrierung.RegistryImpl_Stub.binden(Quelle Unbekannt) bei java.rmi.Die Benennung.binden(Namensgebung.java:160) zu werden.fortega.knx.server.Main.(Main.java:25) zu werden.fortega.knx.server.Main.main(Main.java:16) Verursacht durch: java.net.ConnectException: Connection refused bei java.net.PlainSocketImpl.socketConnect(Native-Methode) bei java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) bei java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195) bei java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182) bei java.net.SocksSocketImpl.connect(SocksSocketImpl.java:433) bei java.net.Socket.connect(Socket.java:524) bei java.net.Socket.connect(Socket.java:474) bei java.net.Socket.(Socket.java:371) bei java.net.Socket.(Socket.java:184) bei der sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:22) bei der sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:128) bei der sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:569) ... 7 mehr
Ich würde sagen, Sie haben ein timing-problem hier. Die Registrierung ist noch nicht vollständig gestartet, wenn Sie die Bindung erneut ausführen wollen.
InformationsquelleAutor Fortega | 2009-12-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
hatte ein simliar problem mit dieser Verbindung die Ausnahme. es wird ausgelöst, entweder, wenn die Registrierung noch nicht gestartet ist (wie in deinem Fall) oder wenn die Registrierung bereits unexported (wie in meinem Fall).
aber ein kurzer Kommentar zu der Unterschied zwischen den 2 Möglichkeiten, um starten Sie die Registrierung:
läuft das rmiregistry.exe in javas bin-Verzeichnis in einem neuen Prozess und weiterhin parallel mit Ihrem java-code.
den rmi-Aufruf der Methode startet der Registrierung gibt die Referenz an, die Registrierung von remote-Objekts und dann weiter mit der nächsten Anweisung.
in Ihrem Fall die Registrierung nicht rechtzeitig gestartet, wenn Sie versuchen, binden Sie Ihr Objekt
InformationsquelleAutor AxelTheGerman
Scheint es zu funktionieren, wenn ich ersetzen Sie die
durch
jemand eine Idee warum? Was ist der Unterschied?
InformationsquelleAutor Fortega
Müssen Sie ein
rmiregistry
laufen, bevor Sie eine Verbindung herstellen möchten (registrieren) einen RMI-Dienst.Den
LocateRegistry.createRegistry(2020)
Aufruf der Methode erzeugt und exportiert eine registry auf dem angegebenen port-Nummer.Finden Sie in der Dokumentation für LocateRegistry
InformationsquelleAutor Steen
Einen Unterschied: wir können Hinweis: in Windows ist:
Wenn Sie
Runtime.getRuntime().exec("rmiregistry 1024");
können Sie sehen, rmiregistry.exe Prozess läuft in den Task-Manager
in der Erwägung, dass, wenn Sie
Registry registry = LocateRegistry.createRegistry(1024);
können Sie nicht sehen, den Prozess im Task-Manager ausgeführt,
Ich denke, Java handhabt es anders.
und das ist mein server.policy-Datei
Vor dem ausführen der Anwendung, stellen Sie sicher, dass Sie getötet alle Ihre vorhandenen
javaw.exe und rmiregistry.exe entspricht Ihre rmi-Programme, die sind
bereits läuft.
Der folgende code funktioniert für mich durch die Verwendung
Registry.LocateRegistry()
oderVM-argument
Code:
InformationsquelleAutor user1008532
es scheint, dass Sie sollten Ihrem Befehl als
String[]
zum Beispiel:es ist einfach mag den Stil
main(String[] args)
.InformationsquelleAutor user1613007