Adloun

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

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →