Fehler - einfaches RMI Beispiel funktioniert nur lokal

Froebel

Grünschnabel
Hallo liebe Gemeinde,

habe jetzt schon viele Beispiele mit RMI und UnicastRemoteObject, PortableRemoteObject oder über IIOP versucht und alle funktionieren wunderbar lokal auf dem Rechner aber nicht im Netzwerk. Bin mit meinem Latein am Ende und hoffe hier auf Hilfe also lasst euch nicht Lumpen :p

Hier vielleicht der Quellcode und die Fehlermeldung.

Das Server-Remote Interface:


public interface IRemoteServer extends Remote{
public String sayHello(String name) throws RemoteException;​
}


]Die Server-Impl:

public class RemoteServer implements IRemoteServer{
public String sayHello(String name) throws RemoteException {​
System.out.println(name+" ruft sayHello auf");​
return "Hallo "+name;​
}​
}


das starten des Servers:

public class StartServer {
public static void main(String[] args) throws RemoteException, MalformedURLException {​
LocateRegistry.createRegistry(3434);​
RemoteServer server = new RemoteServer();​
Remote stub = UnicastRemoteObject.exportObject(server, 3434);​
Naming.rebind("rmi://141.54.166.90:3434/server1", stub);​
while (server != null) {​
}​
}​
}


und als letztes die Clientanfrage:

public class StartClient {
public static void main(String[] args) throws Exception {​
IRemoteServer server = (IRemoteServer) Naming.lookup("rmi://141.54.166.90:3434/server1");​
System.out.println(server);​
System.out.println(server.sayHello("Client1"));​
}​
}



Lokal funktioniert das super doch im Netzwerk nimmer. Das Object holt er sich ja noch von der registry:

Proxy[IRemoteServer,RemoteObjectInvocationHandler[UnicastRef [liveRef: [endpoint:[127.0.0.2:3434](remote),objID:[c8df0d6:11b4fe64652:-7fff, -7756192474264436157]]]]]

aber beim Aufruf der Methode sayHello .... kommt es zu einer Fehlermeldung:

Exception in thread "main" java.rmi.ConnectException: Connection refused to host: 127.0.0.2; nested exception is:
java.net.ConnectException: Connection refused
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.invoke(UnicastRef.java:110)
at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:178)
at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:132)
at $Proxy0.sayHello(Unknown Source)
at StartClient.main(StartClient.java:10)
Caused by: java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:519)
at java.net.Socket.connect(Socket.java:469)
at java.net.Socket.<init>(Socket.java:366)
at java.net.Socket.<init>(Socket.java:180)
at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:22)
at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:128)
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:595)
... 7 more


So nun enttäuscht mich mal nicht und vielleicht kann es jemand mal bei sich versuchen, wenn er mehrere Rechner im Netz hat.

Gruß Toni
 
Hallo,

starte den Server doch mal mit
Code:
java -Djava.rmi.server.hostname=141.54.166.90 StartServer
.

hth
THMD
 
Hallo THMD,

das brachte leider auch nichts. Der Fehler lag am Linux System. Musste noch die /etc/hosts editieren da ein mapping von meiner festen IP auf 127.0.0.2 staffgefunden hat :-(

Vielen Dank für eure Hilfe!

Toni
 

Neue Beiträge

Zurück