moin
Ich habe eine kleine Client-/Serveranwendung geschrieben, die mittels RMI kommuniziert.
Im lokalen Netz funktioniert das auch wunderbar über Rechnergrenzen hinweg (konkret: Serverprogramm läuft in einer virtuellen Machine [VMware] und das Clientprogramm hab ich auf 2 Rechnern erfolgreich getestet.)
Nun soll das Serverprogramm aber auf einem "richtigen" Server (Windows Server 2003) laufen und die Clientprogramme auf beliebigen Rechnern im Internet. Also auf dem Server den Port 1099 freigegeben - aber funktioniert nicht.
Eine Verbindung kann ich scheinbar aufbauen, zumindest liefern folgende Zeilen keine Exception:
Das Serverprogramm gibt dabei aus:
Aber der direkt darauf folgende entfernte Methodenaufruf führt beim Server zu gar keiner Reaktion, und der Client liefert "java.rmi.ConnectException: Connection refused to host: ..."
Dabei ist es egal, ob der Client per NAT ins Internet geht oder direkt eine im I-Net gültige IP-Adresse bekommt. Die IP-Adresse des Servers ist direkt erreichbar. Firewall gib's auf beiden Seiten keine, auf dem Server läuft ein Packetfilter (in dem wie gesagt Port 1099 freigeschalten ist). Einen Securitymanager verwende ich nicht. Andere Dienste auf dem Server wie zB Tomcat sind ohne Probleme erreichbar.
Und was mach ich nun? <= bin ziemlich ratlos
Vielen Dank schon mal für eure Hilfe
cu boesi
Hier der komplette Stacktrace des Clientprogramms:
Ich habe eine kleine Client-/Serveranwendung geschrieben, die mittels RMI kommuniziert.
Im lokalen Netz funktioniert das auch wunderbar über Rechnergrenzen hinweg (konkret: Serverprogramm läuft in einer virtuellen Machine [VMware] und das Clientprogramm hab ich auf 2 Rechnern erfolgreich getestet.)
Nun soll das Serverprogramm aber auf einem "richtigen" Server (Windows Server 2003) laufen und die Clientprogramme auf beliebigen Rechnern im Internet. Also auf dem Server den Port 1099 freigegeben - aber funktioniert nicht.
Eine Verbindung kann ich scheinbar aufbauen, zumindest liefern folgende Zeilen keine Exception:
Code:
Registry reg = LocateRegistry.getRegistry(Konst.addrServer);
RMIConnector server = (RMIConnector) reg.lookup(Konst.rmiName);
Code:
16.08.2007 14:32:14 sun.rmi.server.UnicastServerRef logCall
FEINER: RMI TCP Connection(3)-91.64.35.41: [91.64.35.41: sun.rmi.registry.Regist
ryImpl[0:0:0, 0]: java.rmi.Remote lookup(java.lang.String)]
Dabei ist es egal, ob der Client per NAT ins Internet geht oder direkt eine im I-Net gültige IP-Adresse bekommt. Die IP-Adresse des Servers ist direkt erreichbar. Firewall gib's auf beiden Seiten keine, auf dem Server läuft ein Packetfilter (in dem wie gesagt Port 1099 freigeschalten ist). Einen Securitymanager verwende ich nicht. Andere Dienste auf dem Server wie zB Tomcat sind ohne Probleme erreichbar.
Und was mach ich nun? <= bin ziemlich ratlos
Vielen Dank schon mal für eure Hilfe
cu boesi
Hier der komplette Stacktrace des Clientprogramms:
Code:
java.rmi.ConnectException: Connection refused to host: ***hostname***; nested exception is:
java.net.ConnectException: Connection timed out: connect
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source)
at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source)
at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source)
at sun.rmi.server.UnicastRef.invoke(Unknown Source)
at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(Unknown Source)
at java.rmi.server.RemoteObjectInvocationHandler.invoke(Unknown Source)
at $Proxy0.login(Unknown Source)
at bnclient.RMIClient.login(RMIClient.java:49)
at bnclient.Login.login(Login.java:74)
at bnclient.Login$EvtKeys.keyReleased(Login.java:52)
at java.awt.Component.processKeyEvent(Unknown Source)
at javax.swing.JComponent.processKeyEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.KeyboardFocusManager.redispatchEvent(Unknown Source)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(Unknown Source)
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(Unknown Source)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown Source)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.Dialog$1.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.net.ConnectException: Connection timed out: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(Unknown Source)
at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(Unknown Source)
... 39 more