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.