Ce document intitulé "Développement d'applications réparties (DARE)" est destiné aux étudiants de l'Université Abdelhamid Mehri – Constantine 2 pour le semestre 1 de l'année académique 2020-2021. Il couvre les notions suivantes:
- Le mécanisme de communication Java côté serveur et côté client utilisant des "stream sockets".
- La création d'une application Client/Serveur où le client transmet un nombre entier au serveur, qui calcule ensuite sa factorielle et retransmet le résultat au client.
- L'utilisation de sockets dans une architecture de serveur web.
Exercices TD Développement d'applications réparties
Télécharger PDFDéveloppement d'applications réparties (DARE)
Exercice 1
Question 1 :
Détailler, en 6 phases, le mécanisme Java de communication, côté serveur, entre un client et un serveur utilisant des "stream sockets" (classe ServerSoket et Socket).
Réponse :
- Création d'un objet ServerSocket sur le port spécifié
- La socket créée attend indéfiniment une connexion cliente
- Obtention des flots d'E/S
- Phase de communication client/serveur via les objets ObjectInputStream et ObjectInputStream
- Fermeture de la socket
- La socket serveur retourne à l'étape 2.
Question 2 :
Détailler, en 4 phases, le mécanisme Java de communication, côté client, entre un client et un serveur utilisant des "stream sockets" (classe ServerSoket et Socket).
Réponse :
- Création d'un objet Socket
- Obtention des flots d'E/S
- Phase de communication client/serveur via les objets ObjectInputStream et ObjectInputStream
- Fermeture de la socket
Exercice 2
Dans une application Client/Serveur, créer une socket Client et une socket Serveur selon le scénario suivant :
Le client transmet un nombre entier au serveur, ensuite le serveur calcule sa factorielle et retransmet le résultat au client.
Client
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class Client {
public static void main(String args[]) {
try {
Socket socket = new Socket(InetAddress.getLocalHost(), 2009);
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
Scanner sc = new Scanner(System.in);
System.out.print("Entrez un nombre : ");
int number = sc.nextInt();
out.writeInt(number);
out.flush();
DataInputStream in = new DataInputStream(socket.getInputStream());
System.out.println("\nfact(" + number + ") = " + in.readLong());
} catch (UnknownHostException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
Serveur
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;
public class Server {
private static long factorial(int n) {
if (n == 0 || n == 1) {
return 1;
} else if (n == 2) {
return 2;
} else {
return n * factorial(n - 1);
}
}
public static void main(String args[]) {
try {
ServerSocket server = new ServerSocket(2009);
Socket socket = server.accept();
DataInputStream in = new DataInputStream(socket.getInputStream());
int number = in.readInt();
System.out.println("Nombre reçu sur le serveur = " + number);
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
out.writeLong(factorial(number));
out.flush();
out.close();
} catch (IOException ex) {
Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Exercice 3
Navigateur << interface >> Socket de réception
SGBD <<use>> << interface >> Socket d’émission
Serveur web <<realize>>
Socket MySQL <<use>> << interface >>
FAQ
Qu'est-ce qu'une socket ?
Une socket est un point de connexion entre deux programmes sur un réseau. Elle permet la communication entre un client et un serveur.
Comment fonctionne la communication entre un client et un serveur ?
La communication entre un client et un serveur se fait via des sockets. Le client établit une connexion avec le serveur, envoie des données, et reçoit des réponses.
Quelle est l'importance des sockets dans le développement d'applications réparties ?
Les sockets sont essentielles dans le développement d'applications réparties car elles permettent la communication entre différentes parties d'une application qui peuvent être situées sur des machines différentes.