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



## Arbon (29. Dez 2008)

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: 


```
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:


```
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:

```
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


----------



## HoaX (30. Dez 2008)

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


----------



## Arbon (30. Dez 2008)

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?


----------



## Gast (30. Dez 2008)

wie lautet den der RMI Verbindungsstring ?

rmi://10.0.0.5:1099/<boundname> ???


----------



## Arbon (31. Dez 2008)

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


----------

