# "Address already in use: JVM_Bind" - Probelm



## Foermchen82 (30. Okt 2008)

Hallo zusammen.

ich habe folgende Klassen:

ServerInf:


```
public interface ServerInf extends Remote{

	public abstract String sayHello(MeinInterface meinInterface) throws RemoteException;
	public abstract NewObjectInf getNewObject() throws RemoteException;
}
```

Server-Klasse


```
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


```
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 (31. Okt 2008)

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.


----------

