"Address already in use: JVM_Bind" - Probelm

Status
Nicht offen für weitere Antworten.

Foermchen82

Top Contributor
Hallo zusammen.

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?
 

L-ectron-X

Gesperrter Benutzer
Der Port wird nur vom Server belegt. An diesem Port lauscht er auf eingehende Verbindungen/Anfragen.
Du kannst einen Port nur einmal mit einem Server öffnen. Der Client hat damit nichts zu tun. Er verbindet sich mit dem Server über diese "Leitung".
Es kann sein, dass dein Server nicht beendet wird und noch als aktiver Prozess im Speicher bleibt.
Das kannst du prüfen, in dem du mal in deinen Taskmanager/Prozessliste guckst. Da müsste dann, obwohl dein Server und dein Client vermeintlich beendet sind, trotzdem noch eine Java-Instanz laufen.
Du musst also den Server und alle von ihm gestarteten Threads beenden, damit dein Port freigegeben wird.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben