programmation Java (école d'ingénieur) · Chapitre 16 · Exercice de TD
Clients simultanés
Réseau : sockets client/serveur · niveau 2
Énoncé
Écrire un programme qui lance cinq fils ; le fil () se connecte au serveur de calcul, envoie MUL k k, mémorise la réponse, puis envoie QUIT. Une fois les cinq fils terminés, le programme affiche les réponses dans l'ordre des numéros. Dans quel ordre le serveur a-t-il traité les requêtes ?
Corrigé
Chaque fil écrit sa réponse dans sa propre case du tableau reponses ; le join garantit que le fil principal les voit toutes.
Thread[] clients = new Thread[5];
String[] reponses = new String[5];
for (int k = 0; k < 5; k++) {
int numero = k;
clients[k] = new Thread(() -> {
try (Socket s = new Socket("localhost", 5001);
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream(), StandardCharsets.UTF_8));
PrintWriter out = new PrintWriter(new OutputStreamWriter(s.getOutputStream(), StandardCharsets.UTF_8), true)) {
out.println("MUL " + numero + " " + numero);
reponses[numero] = in.readLine();
out.println("QUIT");
in.readLine();
} catch (IOException e) {
reponses[numero] = "erreur : " + e.getMessage();
}
});
clients[k].start();
}
for (Thread t : clients) t.join();
for (int k = 0; k < 5; k++) System.out.println("client " + k + " : MUL " + k + " " + k + " => " + reponses[k]);
client 0 : MUL 0 0 => OK 0
client 1 : MUL 1 1 => OK 1
client 2 : MUL 2 2 => OK 4
client 3 : MUL 3 3 => OK 9
client 4 : MUL 4 4 => OK 16
Le journal du serveur montre que les requêtes ont été traitées dans un ordre quelconque, différent de l'ordre des numéros (lors de l'exécution de l'auteur : 0, 4, 1, 2, 3), et que les cinq clients étaient connectés en même temps. C'est pourquoi le programme range les réponses par numéro au lieu de les afficher au fil de l'eau.
100 % gratuit
La suite du chapitre est sur Adloun
- 9 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.