ExempleCh03_01_HelloRetourTélécharger Exemple simple en RMI : le message HELLO README.txt Le Serveur exécute un OD qui s'appelle HELLO. HELLO permet d'obtenir le message de bonjour à afficher à l'écran. Le client et le serveur s'échange une chaine de caractère : Le client demande à HELLO le texte de bienvenu et l'affiche. Pour compiler : ------------- javac *.java Pour executer : --------------- Exécuter en premier le serveur sur une machine A : java Exemple01 Exécuter ensuite le client sur une autre machine B : java Client <adresse IP de A> Si vous avez qu'1 machine alors vous pouvez exécuter sur la même machine. Dans une fenêtre de commande: java Exemple01 Dans une autre fenêtre de commande: java Client Client.java // Client.java import java.rmi.*; public class Client { public static void main(String args[]) throws Exception { String hostServeur="localhost"; if (args.length==1) hostServeur=args[0]; HelloODInt bonjour = (HelloODInt)(Naming.lookup("rmi://"+hostServeur+":9100/HELLO")); while(true) { String message = bonjour.getMessageHello(); System.out.println(message); try{Thread.sleep(500);}catch(Exception ex){}; } } } ExempleCh03_01.java // Exemple simple en RMI : le message HELLO import java.lang.*; import java.io.*; // Les packages indispensables pour utiliser RMI import java.rmi.*; import java.rmi.registry.*; import java.rmi.server.*; // Le programme serveur qui crée l'OD public class ExempleCh03_01 { public static void main(String args[]) throws Exception { // Création du service de nommage utilisé par RMI try{ LocateRegistry.createRegistry(9100); } catch(Exception ex){}; // Création de l'objet distribué System.out.println("Création de l'objet distribué"); HelloOD od = new HelloOD(9101, "Bonjour, je m'apelle Pierre DUPONT"); // Enregsitrement de l'OD dans l'annuaire sous le nom "HELLO" // Ce nom doit être unique dans l'annuaire System.out.println("Enregistrement de l'objet distribué"); Naming.rebind("rmi://localhost:9100/HELLO",od); /* Un server de socket est instancié et est exécuté en fond par un thread. Ce qui explique que si on ne fait pas les lignes qui suivent le programme ne s'arrête pas. Pour terminer proprement, il faut tuer proprement tous les OD, ce qui provequera la fin du serveur de socket */ System.out.println("Bus en ecoute...."); // L'opérateur décide l'arrêt de l'OD DataInputStream in = new DataInputStream(System.in); System.out.print("Taper rc, pour arreter le serveur..."); System.out.flush(); String valeur= in.readLine(); // Désenregistrement de l'OD de l'annuaire Naming.unbind("rmi://localhost:9100/HELLO"); // Destruction de l'OD UnicastRemoteObject.unexportObject(od,true); // true : pour forcer } } HelloOD.java // HelloOD.java // import java.rmi.*; import java.rmi.server.*; public class HelloOD extends UnicastRemoteObject implements HelloODInt { private String messageHello; public HelloOD(int portServerSocket, String messageHello) throws RemoteException { super(portServerSocket); // Le port utilisé par le server de socket this.messageHello = messageHello; } public String getMessageHello() { System.out.println("Appel de getMessageHello"); return(messageHello); } } HelloODInt.java // HelloODInt.java // import java.rmi.*; public interface HelloODInt extends Remote { public String getMessageHello() throws RemoteException; } compil.bat mkdir bin del /f /s /q bin\*.class javac -d bin *.java pause runClient.bat cd bin java Client pause runServeur.bat cd bin java ExempleCh03_01 pause