M1 RSD : Algorithmique des systèmes et applications réparties Correction CC Partie II : Généralité sur les systèmes distribués (6 pts) 1. Citez (sans détailler) 4 modèles d’exécution pour le client/serveur. (1 pt) RPC, RMI, CORBA, JSP !! Attention client/serveur traditionnel, à objets, de données et web sont des types de client/serveur ! 2. Complétez la phrase suivante : Je peux construire un détecteur de pannes parfait dans un modèle synchrone si …………. (1 pt) Il n’ya pas de perte de messages ou communication fiable. 3. Quel est le type de la faute suivante : un message est placé dans le tampon de réception d’un processus mais le processus ne le reçoit pas. (1 pt) Omission en réception. 4. Quelle est la relation entre le langage IDL et CORBA ? (1 pt) IDL est un langage de définition d’interface (ce n’est pas un langage de programmation) utilisé pour faire communiquer des entités implémentées avec divers langages (exemple communiquer un client C avec un serveur java). C’est le mécanisme utilisé dans CORBA pour supporter plusieurs langages. 5. Donnez un exemple d’application qui est sensible à la gigue. (1 pt) La gigue c’est la variation de la latence ou le délai. Une gigue élevée signifie que les délais sont fortement variables. Un jeu en réseau, par exemple, peut être perturbé à cause de ça ! Toutes les applications temps réel (Skype, vidéo conférence, …) sont aussi sensibles à la gigue. 6. Donnez un exemple dans lequel un système distribué passe d’une exactitude faible à une exactitude finalement forte. (1 pt) Avec deux processus corrects P1 et P2, P1 soupçonne le P2 donc c’est une exactitude faible. Par la suite si P1 reçois un message de P2, l’exactitude deviens finalement forte. Partie III : Sockets TCP (6 pts) 1. Pour communiquer une chaîne de caractères entre un client et un serveur en utilisant les sockets TCP, le client peut utiliser la méthode println de PrintWriter et le serveur peut utiliser la méthode readLine() de BufferedReader. Donnez deux manières différentes pour réaliser le même traitement (en utilisant d’autres flots ou d’autres méthodes) (2 pts). - Le client utilise writeUTF de DataOutputStream, le serveur fait un readUTF de DataInputStream. - Le client peut faire un write(buffer, 0, mot.length()) de OutputStream (buffer est la conversion de la chaine de caractères en octets, par exemple, byte[] buffer = new byte[1024];buffer = mot.getBytes();), le serveur peut faire un read (buffer) de InputStream, par la suite il utilise le constructeur de String pour convertir le buffer en une chaine de caractère. 2. Que fait la méthode mystere de la classe java suivante ? (1 pt). import java.io.*; public class A { public static void mystere (InputStream in, OutputStream out) throws IOException { byte buf[] = new byte[1024]; int n; while((n=in.read(buf))!=-1) out.write(buf,0,n); in.close(); out.close(); } } La méthode mystere transfert une donnée de InputStream vers OutputStream Kilo octets par Kilo octets. 3. Soit les deux classes java suivantes : //// Serveur.java import java.io.*; import java.net.*; public class Serveur { public static void main(String []args) throws IOException { Socket sock = new ServerSocket(9001).accept(); A.mystere(sock.getInputStream(),new FileOutputStream("./src/test2")); sock.close(); } } /////////// Client.java import java.io.*; import java.net.*; public class Client { public static void main(String []args) throws IOException { Socket sock = new Socket(InetAddress.getLocalHost(),9001); A.mystere(new FileInputStream("./src/test1"),sock.getOutputStream()); sock.close(); } } a. Que fait le client ? (0,5 pt). Le client transfert test1 qui se trouve dans src vers son OutputStream. b. Que fait serveur ? (0,5 pt). Le serveur transfert test1 qui se trouve maintenant dans son InputStream (c’est le OutputStream du client) vers le même dossier src mais sous le nom de test2. c. Que fait cette application en exécutant les deux classes dans localhost ? (1pt) L’application client/serveur crée dans le dossier src une copie de test1 sous le nom test2. d. En utilisant deux machines différentes (une machine coté client et une autre machine coté serveur), quel sera l’objectif de cette application ? (1pt) Dans un réseau, l’application est utilisée pour envoyer un fichier du client vers le serveur en changeant son nom coté serveur.