RMI java.rmi.ConnectException: Connection refused to host: 1

Status
Nicht offen für weitere Antworten.

Arbon

Bekanntes Mitglied
Hallo
Hab ein Programm das über RMI eine Methode von einem anderen Programm aufruft. Das Problem dabei ist, das jedesmal beim Versuch eine Verbindung herzustellen eine Exception kommt:

Code:
java.rmi.ConnectException: Connection refused to host: 10.0.0.5; nested exception is: 
	java.net.ConnectException: Connection refused: connect
	at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:601)
	at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:198)
	at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:184)
	at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:322)
	at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
	at arm.zatacka.GamePanel.transfer(GamePanel.java:307)
	at arm.zatacka.Frame$1.actionPerformed(Frame.java:117)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
	at javax.swing.AbstractButton.doClick(AbstractButton.java:357)
	at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1225)
	at javax.swing.plaf.basic.BasicMenuItemUI$Handler.menuDragMouseReleased(BasicMenuItemUI.java:1329)
	at javax.swing.JMenuItem.fireMenuDragMouseReleased(JMenuItem.java:568)
	at javax.swing.JMenuItem.processMenuDragMouseEvent(JMenuItem.java:465)
	at javax.swing.JMenuItem.processMouseEvent(JMenuItem.java:411)
	at javax.swing.MenuSelectionManager.processMouseEvent(MenuSelectionManager.java:306)
	at javax.swing.plaf.basic.BasicPopupMenuUI$MouseGrabber.eventDispatched(BasicPopupMenuUI.java:817)
	at java.awt.Toolkit$SelectiveAWTEventListener.eventDispatched(Toolkit.java:2353)
	at java.awt.Toolkit$ToolkitEventMulticaster.eventDispatched(Toolkit.java:2245)
	at java.awt.Toolkit.notifyAWTEventListeners(Toolkit.java:2203)
	at java.awt.Component.dispatchEventImpl(Component.java:4399)
	at java.awt.Container.dispatchEventImpl(Container.java:2081)
	at java.awt.Component.dispatchEvent(Component.java:4331)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4301)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3965)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3895)
	at java.awt.Container.dispatchEventImpl(Container.java:2067)
	at java.awt.Window.dispatchEventImpl(Window.java:2458)
	at java.awt.Component.dispatchEvent(Component.java:4331)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Hab schon so einiges rumprobiert, aber es will einfach nicht klappen. Wenn ich es lokal ausführe, d.H. beides an einem Rechner funktioniert es einwandfrei. Nun aber soll es über WLAN von einem Laptop zu einem Access Point gehen, von diesem zu einen Switch und von dort zum PC. Router ist eigendlich keiner dazwischen. Hab am PC (Server) bereits mit netstat nachgesehen, Port 1099 ist dort vorhanden und wird auch von java verwendet. Der Laptop ist Client.

Habe es so implementiert:
Server:

Code:
							try {

								LocateRegistry
										.createRegistry(Registry.REGISTRY_PORT);

								Transfer stub = (Transfer) UnicastRemoteObject
										.exportObject(getFrame(), 0);
								RemoteServer.setLog(System.out);

								Registry registry = LocateRegistry
										.getRegistry();
								registry.rebind("Transfer", stub);

							} catch (RemoteException e) {
								e.printStackTrace();
							}

Client:
Code:
Registry registry;
		try {
			registry = LocateRegistry.getRegistry();
			Transfer trans = (Transfer) registry.lookup("Transfer");
			trans.transfer(new SerializedImage(sf), hind, winScore, abprallen,
					geschw, sp);
		} catch (AccessException e) {
			e.printStackTrace();
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (NotBoundException e) {
			e.printStackTrace();
		}

danke im Vorraus
mfg
 
refused bedeutet dass entweder
a) auf dem port niemand lauscht/server nicht gestartet
b) firewall den zugriff blockiert

fall a) kannst du ganz leicht mittels netstat prüfen, fall b) in deiner firewall
 
Also auf dem PC (Server) ist eindeutig die Verbindung da. Sie erscheint unter Netstat

Proto Lokale Adresse Remoteadresse Status
TCP 10.0.0.2:1099 10.0.0.2:1500 Hergestellt
TCP 10.0.0.2:1500 10.0.0.2:1099 Hergestellt

Trotzdem kommt am Laptop die oben geschriebene Exception. Es ist auch möglich auf dem Laptop ebenfalls einen Server zu starten der auch Port 1099 verwendet, also ob die beiden Geräte keine Verbindung hätten. Firewall hab ich in beiden TCP Port 1099 zugelassen. Die beiden Geräte sind auch bestimmt verbunden (ping & tracert funktioniert)

Woran könnte das noch liegen?
 
wie lautet den der RMI Verbindungsstring ?

rmi://10.0.0.5:1099/<boundname> ???
 
ich hab es jetzt so gelöst, indem ich SIMON (das soviel ich weiss von einem Forenmember hier entwickelt wird) statt RMI verwende. Mit dem funktioniert es problemlos. Trotzdem danke für eure Mühen

mfg
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben