Sieciowa komunikacja procesów - RMI

// Przykładowa zawartość plików

//

PolitykaSerwera.txt

i

PolitykaKlienta.txt

grant {

permission java.security.AllPermission;

};

// plik RMI1_Interfejs.java

import java.rmi.*;

public interface RMI1_Interfejs extends Remote {

public String podajDate() throws RemoteException;

}

Opracował: Zbigniew Suski

1

Sieciowa komunikacja procesów - RMI

//plik RMI1_Serwer.java

import java.rmi.*;

import java.rmi.registry.*;

import java.rmi.server.*;

import java.net.*;

import java.util.*;

public class RMI1_Serwer implements RMI1_Interfejs{

private static final int port = 8501;

private final String nazwaSerwera = "RMI1_Serwer"; private Registry reg;

public void RMI1_Serwer() throws RemoteException

{

System.out.println("SERWER: Utworzono obiekt serwera");

}

public void wykonaj()

{

try {

reg = LocateRegistry.getRegistry(Registry.REGISTRY_PORT); System.out.println("SERWER: Zlokalizowano rejestr na porcie "

+ Registry.REGISTRY_PORT);

UnicastRemoteObject.exportObject( this, port );

System.out.println("SERWER: Wyeksportowano obiekt serwera na porcie

" + port);

reg.rebind( nazwaSerwera, this );

System.out.println("SERWER: Zarejestrowano obiekt serwera"); System.out.println("SERWER: Oczekuje na zgloszenia");

}

catch ( RemoteException e) {

System.out.println("SERWER: ");

e.printStackTrace();

System.exit(0);

}

}

public String podajDate() throws RemoteException

{

String data = new Date().toString();

System.out.println("SERWER: Wyslalem date> " + data); return data;

}

public static void main(String[] args)

{

System.setSecurityManager( new RMISecurityManager() ); System.out.println("\nSERWER: Zainstalowano zarzadce bezpieczenstwa");

// Utworzenie dostawcy usługi

new RMI1_Serwer().wykonaj();

}

}

Opracował: Zbigniew Suski

2

Sieciowa komunikacja procesów - RMI

//plik RMI1_Klient.java

import java.rmi.*;

import java.rmi.registry.*;

import java.net.*;

public class RMI1_Klient {

private static final String nazwaSerwera = "RMI1_Serwer"; private static RMI1_Interfejs interfejs;

private String hostSerwera;

public static void main( String[] args )

{

//

Parametrem wywołania klienta jest nazwa lub adres IP komputera,

//

który przechowuje rejestr. Bez parametru jest przyjmowany localhost System.setSecurityManager( new RMISecurityManager() ); System.out.println("\nKLIENT: Zainstalowano zarzadce bezpieczenstwa"); new RMI1_Klient( args.length !=1 ? "localhost" : args[0] ).wykonaj();

}

public RMI1_Klient( String host )

{

this.hostSerwera = host;

}

public void wykonaj()

{

System.out.println("KLIENT: Wykorzystuje serwer na " + hostSerwera); try {

interfejs = (RMI1_Interfejs)Naming.lookup( "//" +

hostSerwera + '/' + nazwaSerwera);

System.out.println("KLIENT: Utworzono odnosnik do dostawcy"); System.out.println("KLIENT: Pobranie daty"); String data = interfejs.podajDate();

System.out.println("KLIENT: Uzyskano od serwera: " + data);

}

catch ( MalformedURLException ee) {

System.out.println("KLIENT: Niepoprawny URL ???"); System.exit(0);

}

catch ( NotBoundException ee) {

System.out.println("KLIENT: Nie uzyskano połączenia z serwerem"); System.exit(0);

}

catch ( RemoteException ee) {

System.out.println("KLIENT: Zdalny wyjątek ???"); ee.printStackTrace();

System.exit(0);

}

System.out.println("KLIENT: Koniec");

}

}

Opracował: Zbigniew Suski

3