Hilfe bei RMI

mergon

Grünschnabel
Ich habe ein Problemm bei demm ich Hilfe benötige.
Und zwar möchte ich ein Kleines Programm schreiben das mittels RMI komniziert, dazu habe ich einen Server mit Ubuntu auf dem der RMI-Server laufen soll und einen Client auf einem XP Rechner, die über Open-VPN mit einander verbunden sind.
Mein Problemm liegt darin, das der Endpoint des Servers auf die Pfysikalische Netzwerkkarte richtung WWW festgelegt ist und sich nicht auf dei IP 192.168.5.1 festlegen läst.
Ich habe schon alles ausprobiert was ich irgendwo finden konnte, allerdings ohne Erfolg.
Der Client verbindet zwar zum Server, der Server Reagiert, schikt die Antwort aber wo anders hin.

Hier der Code:

Client
Java:
package de.edu.bt.rmi.client;

import java.io.IOException;
import java.net.Socket;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.RMIClientSocketFactory;

import de.edu.bt.rmi.Calculator;

public class Client {

	/**
	 * @param args
	 * @throws RemoteException 
	 * @throws NotBoundException 
	 */
	public static void main(String[] args) throws RemoteException, NotBoundException {
		RMIClientSocketFactory ClientSocket = new RMIClientSocketFactory() {
			public Socket createSocket(String host, int port) throws IOException {
				Socket so = new Socket(host, port);
				return so;
			}
		};
		Registry reg = LocateRegistry.getRegistry("192.168.5.1",Registry.REGISTRY_PORT, ClientSocket);

		Calculator calc = (Calculator) reg.lookup("Calculator");
		
		System.out.println("Die Summe von 3 und 2 ist: " +calc.add(2, 3));
		System.out.println(calc.getClass());
	}
}

Server
Java:
package de.edu.bt.rmi.server;

import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.RMIClientSocketFactory;
import java.rmi.server.RMIServerSocketFactory;
import java.rmi.server.RemoteServer;
import java.rmi.server.UnicastRemoteObject;

import de.edu.bt.rmi.Calculator;
import de.edu.bt.rmi.CalculatorImpl;

public class Server {

	/**
	 * @param args
	 * @throws RemoteException 
	 */
	public static void main(String[] args) throws RemoteException {
		
		RMIServerSocketFactory ServerSocket = new RMIServerSocketFactory() {
			public ServerSocket createServerSocket(int port) throws IOException {
				byte [] b = new byte[] {(byte)192,(byte)168,(byte)5,(byte)1};
				ServerSocket serverS = new ServerSocket(port, 10, InetAddress.getByAddress(b));
				serverS.bind(InetSocketAddress.createUnresolved("192.168.5.1", port) );
				return serverS;
			}
		};
		RMIClientSocketFactory ClientSocket = new RMIClientSocketFactory() {
			public Socket createSocket(String host, int port) throws IOException {
				Socket so = new Socket(host, port);
				return so;
			}
		};

		Registry reg = LocateRegistry.createRegistry(Registry.REGISTRY_PORT, ClientSocket, ServerSocket);
		

		Calculator stub = (Calculator) UnicastRemoteObject.exportObject(new CalculatorImpl(), 0);
		reg.rebind("Calculator", stub);
		
		System.out.println(reg);
		System.out.println(reg.list()[0]);
		RemoteServer.setLog(System.out);
		try {
			Thread.sleep(100);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

Interface
Java:
package de.edu.bt.rmi;

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface Calculator extends Remote {
	public int add(int a, int b) throws RemoteException;
}

Funktions Classe
Java:
package de.edu.bt.rmi;

import java.rmi.RemoteException;

public class CalculatorImpl implements Calculator {
	public int add(int a, int b) throws RemoteException {
		return a+b;
	}
}

Vielen dank schon mal im voraus.
 
Zurück