Hallo zusammen.
ich habe folgende Klassen:
ServerInf:
Server-Klasse
Client
wenn ich jedoch client und server starte bekomm ich die meldung:
java.rmi.server.ExportException: Port already in use: 1099; nested exception is:
java.net.BindException: Address already in use: JVM_Bind
at sun.rmi.transport.tcp.TCPTransport.listen(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport.exportObject(Unknown Source)
at sun.rmi.transport.tcp.TCPEndpoint.exportObject(Unknown Source)
at sun.rmi.transport.LiveRef.exportObject(Unknown Source)
at sun.rmi.server.UnicastServerRef.exportObject(Unknown Source)
at java.rmi.server.UnicastRemoteObject.exportObject(Unknown Source)
at java.rmi.server.UnicastRemoteObject.exportObject(Unknown Source)
at client.Client.main(Client.java:21)
Klar benutze ich den port 1099 mehrmals. Für client und für server. Wie sollen sie auch sonst miteinander Kommunizieren??
Was muss ich jedoch tun, das Client-Objekt zu exportieren, damit ich auf Sververseite die Methode "meineMethode" in sayHello auzurufen???
Danke im voraus?
ich habe folgende Klassen:
ServerInf:
Code:
public interface ServerInf extends Remote{
public abstract String sayHello(MeinInterface meinInterface) throws RemoteException;
public abstract NewObjectInf getNewObject() throws RemoteException;
}
Server-Klasse
Code:
public class Server implements ServerInf {
/**
* @param args
*/
public static void main(String[] args) {
Server server = new Server();
final String host = "localhost";
final int port = 1099;
final String url = "rmi://" + host + ":" + port;
try {
LocateRegistry.createRegistry(1099);
} catch (RemoteException e) {
}
try {
UnicastRemoteObject.exportObject(server, 1099);
Naming.rebind(url + "/Server", server);
while (true) {
Thread.sleep(5000);
System.out.println("Ping");
}
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/* (non-Javadoc)
* @see RMITest.server.ServerInf#sayHello()
*/
public String sayHello(MeinInterface meinInterface) throws RemoteException{
return "Hello";
}
public NewObjectInf getNewObject() throws RemoteException{
NewObjectInf object = new NewObject();
UnicastRemoteObject.exportObject(object, 1099);
return object;
}
}
Client
Code:
public class Client implements Serializable, Remote{
public static void main(String[] args){
try {
Client client = new Client();
ServerInf server = (ServerInf) Naming.lookup("rmi://localhost:1099/Server");
System.out.println("Yes");
UnicastRemoteObject.exportObject(client, 1099);
System.out.println(server.sayHello(client.getInterface()));
server.getNewObject();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NotBoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private MeinInterface getInterface(){
return new MeinInterface(){
@Override
public void meineMethode() {
// TODO Auto-generated method stub
}
};
}
}
wenn ich jedoch client und server starte bekomm ich die meldung:
java.rmi.server.ExportException: Port already in use: 1099; nested exception is:
java.net.BindException: Address already in use: JVM_Bind
at sun.rmi.transport.tcp.TCPTransport.listen(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport.exportObject(Unknown Source)
at sun.rmi.transport.tcp.TCPEndpoint.exportObject(Unknown Source)
at sun.rmi.transport.LiveRef.exportObject(Unknown Source)
at sun.rmi.server.UnicastServerRef.exportObject(Unknown Source)
at java.rmi.server.UnicastRemoteObject.exportObject(Unknown Source)
at java.rmi.server.UnicastRemoteObject.exportObject(Unknown Source)
at client.Client.main(Client.java:21)
Klar benutze ich den port 1099 mehrmals. Für client und für server. Wie sollen sie auch sonst miteinander Kommunizieren??
Was muss ich jedoch tun, das Client-Objekt zu exportieren, damit ich auf Sververseite die Methode "meineMethode" in sayHello auzurufen???
Danke im voraus?