# RMI-Server mit 2 IP-Adressen



## Boar (20. Feb 2007)

Hi,
ich hab ein Problem mit einem RMI-Netzwerkprogramm. An sich läufts sehr gut, das Problem ist nur, das der PC des Servers eine WLAN-IP und eine LAN-IP hat. Wenn man den Server jetzt startet, läuft er nur auf einer IP-Adresse (der WLAN-Adresse). Die Clients können sich jetzt nur über WLAN connecten, per LAN bekommt der Client aber folgenden Error:

Exception creating connection to: 192.168.2.12; nested exception is: 
java.net.NoRouteToHostException: No route to host: connect

192.168.2.12 ist die WLAN-IP (obwohl man nur per LAN verbunden is). 

Der Server:

```
public Server() throws RemoteException {
		LocateRegistry.createRegistry(Registry.REGISTRY_PORT);

		try {
			Naming.rebind("//127.0.0.1/server", this);
		} catch (MalformedURLException e) {
			e.printStackTrace();
		}
	}
```

Der Client:

```
public Client(String ip) throws RemoteException {
		try {
			this.iServer = (ServerInterface) Naming.lookup(
					"rmi://" + ip + ":"
					+ Registry.REGISTRY_PORT
					+ "/server");
		} catch (Exception e) {
			e.printStackTrace();
			System.exit(0);
		}
	}
```

Gibt es eine Möglichkeit, den Server auf zwei unterschiedlichen IP's laufen zu lassen?

Danke


----------



## Boar (23. Feb 2007)

Hat denn wirklich keiner eine Idee? 

Vorher lief das Programm über Sockets und I/O-Streams, da hat's ohne Probleme funktioniert (Server startet, Client1 connected per WLAN, Client2 per LAN). Soweit ich weiß regelt RMI die Verbindung doch auch über Sockets, also muss es doch ne Möglichkeit geben, oder?

Würd mich sehr freuen wenn jmd. ne Lösung, oder auch nur eine Idee hat.

Gruß,
Boar


----------



## L-ectron-X (23. Feb 2007)

Wie startest du denn den Server? (Befehl auf der Konsole etc.)


----------



## Boar (23. Feb 2007)

Das ganze sieht wie folgt aus:

In einer Controller Klasse wird eine neue Server Instanz erstellt:

```
public class Controller {
	
	private Server server;
	public Controller() {
		try {
			server = new Server();
		} catch (RemoteException e) {
			e.printStackTrace();
			System.exit(0);
		}
	}
	public static void main() {
		new Controller();
	}
}
```


```
public class Server extends UnicastRemoteObject implements ServerInterface, Serializable {
	
	public Server throws RemoteException {
		LocateRegistry.createRegistry(Registry.REGISTRY_PORT);		
		try {
			Naming.rebind("//127.0.0.1/server", this);			
		} catch (MalformedURLException e) {
			e.printStackTrace();
		}		
	}
}
```

ServerInterface gibt die Methoden vor, die der Client beim Server aufrufen kann.
Aufgerufen wird das ganze aus einer .jar-datei, ohne besondere Befehle. 

Beim Client siehts so ähnlich aus, die Controller-Klasse erstellt einen kleinen JDialog, der nach der IP-Adresse des Servers fragt und danach wird eine neue Client-Instanz erstellt, die sich wie im ersten Post bereits erklärt beim Server anmeldet. (Wird auch aus ner .jar aufgerufen)


----------



## Yzebär (27. Feb 2007)

Schon mal probiert den Server 2mal (mit beiden IPs) zu registrieren?

Ansonsten würde ich einen zweiten Server erstellen, der die Methodenaufrufe an den anderen Server weiterleitet.


----------



## Boar (27. Feb 2007)

Ich hab keine Möglichkeit gefunden, zwei IP's auf einem Server zu registrieren, zumindest nicht mit dem gleichen Port. Das ist auch das Problem bei zwei Servern: Sie müssten auf 2 unterschiedlichen Ports laufen, aber das will ich nach Möglichkeit umgehen. 

Ich hab gedacht da gibts ne simple Lösung für, da es mit Sockets ja schließlich auch ohne Probleme geht. Aber scheinbar  ist dem nicht so, deshalb wird mein nächstes Netzwerk-Projekt wohl wieder auf Sockets basieren.

Aber trotzdem danke für die Mühe.

Gruß,
Boar


----------

