Hallo,
erstmal der Code:
ServerInterface.java
Server.java
ClientInterface.java
Client.java
Das ganze funktioniert lokal wunderbar, sobald ich aber den Client auf einem anderen Rechner im Netzwerk starte funktioniert zwar der Lookup, wenn ich aber eine Methode auf dem Server aufrufe bekomme ich folgende Exception(s):
Wo steckt der Fehler? Bzw. was habe ich vergessen?
Vielen Dank schonmal für eure Bemühungen!
Grüße, Sebastian
erstmal der Code:
ServerInterface.java
Java:
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface ServerInterface extends Remote{
public String hello(String text, ClientInterface c) throws RemoteException;
}
Server.java
Java:
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.server.UnicastRemoteObject;
public class Server extends UnicastRemoteObject implements ServerInterface {
protected Server(String ip) throws RemoteException {
super();
LocateRegistry.createRegistry(1099);
LocateRegistry.getRegistry(1099);
try {
Naming.rebind("//" + ip +"/RMI", this);
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
@Override
public String hello(String text, ClientInterface c) throws RemoteException {
c.notifyme();
String ret = "Hello " + text;
return ret;
}
public static void main(String[] args){
try {
Server server = new Server(args[0]);
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
ClientInterface.java
Java:
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface ClientInterface extends Remote {
public void notifyme() throws RemoteException;
}
Client.java
Java:
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.server.RemoteObject;
import java.rmi.server.UnicastRemoteObject;
public class Client implements ClientInterface {
public Client(String ip){
super();
try {
LocateRegistry.getRegistry(ip);
UnicastRemoteObject.exportObject(this,0);
Remote ro = Naming.lookup("//" + ip + "/RMI");
System.out.println("Lookup done ... trying to communicate");
ServerInterface server = (ServerInterface) ro;
System.out.println(server.hello("Client", this));
} catch (NotBoundException e) {
e.printStackTrace();
}
catch (RemoteException e) {
e.printStackTrace();
}
catch(MalformedURLException e)
{
e.printStackTrace();
}
}
@Override
public void notifyme() throws RemoteException {
System.out.println("Serverfunction hello() here ...");
}
public static void main(String[] args){
Client c = new Client(args[0]);
}
}
Code:
java.rmi.ConnectException: Connection refused to host: 127.0.1.1; 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 $Proxy1.hello(Unknown Source)
at Client.<init>(Client.java:23)
at Client.main(Client.java:48)
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:529)
at java.net.Socket.connect(Socket.java:478)
at java.net.Socket.<init>(Socket.java:375)
at java.net.Socket.<init>(Socket.java:189)
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)
... 8 more
Wo steckt der Fehler? Bzw. was habe ich vergessen?
Vielen Dank schonmal für eure Bemühungen!
Grüße, Sebastian
Zuletzt bearbeitet: