Bonjour, j'ai développer une petite application de tchatche entre un serveur et un client. Le serveur se lance en 1 er lieu pour vérifier s'il ya des demandes de connexions puis le client se lance pour se connecter au serveur. Il ya un échange de message entre les deux machines et le client peut quitter lorsqu'il tape le mot "quitter".

Bon j'ai trouvé un problème surtout au niveau de la méthode readLine(), puisqu'elle bloque ce qui envoie le message en attendant la réponse du distinataire c a d un client ne peut pas envoyer deux messages succesives aux clients.
Voila le code j'espère que c'est clair :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import java.net.*;
import java.io.*;
 
/* Le code de la classe serveur */ 
public class Serveur {
    public Serveur() {
    }
    public void dialoguer(){
        ServerSocket sEcoute = null;
        try {
            // ouverture du service
            int portEcoute = 7001;
            int maxConnexions = 1;
            sEcoute = new ServerSocket(portEcoute, maxConnexions);
            // traitement des demandes de connexion
            boolean fini = false;
            Socket sService = null;
            System.out.println("Attente de connexion...");
            sService = sEcoute.accept();
            System.out.println("Connexion établie...");
            BufferedReader in = new BufferedReader(new InputStreamReader(sService.getInputStream()));
            BufferedReader keybord = new BufferedReader(new InputStreamReader(System.in));
            PrintWriter out = new PrintWriter(sService.getOutputStream(),true);
            String demande;
            String reponse;
            while (!fini) {
                demande = in.readLine();
                if (demande.equals("CLIENT : quitter")||demande.equals("CLIENT : Quitter")){
                    out.println("...ok! Bye! fermeture de la connexion  ");
                    fini = true;
                    continue;
                }
                System.out.println(demande);
                reponse = keybord.readLine();
                out.println("SERVEUR : "+reponse);
            }
            // c'est fini - on clôt le service
            System.out.println("...fermeture de la connexion!");
            sEcoute.close();
            sService.close();
        } catch (Exception e) {
            // on traite l'exception
            System.out.println("Erreur !" + e);
        }
    }
    public static void main(String[] args) {
        Serveur serveur = new Serveur();
        serveur.dialoguer();
    }
}

/* code de la classe client */
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
public class Client {
 
    public Client() {
    }
 
    public void dialoguer(){
        Socket sClient=null;
        try{
            // on se connecte au service officiant sur le port P de la machine M
            System.out.println("Demande de connexion...");
            sClient=new Socket("127.0.0.1",7001);
            System.out.println("Connexion établie...");
            // on crée les flux d'entrée-sortie de la socket client
            BufferedReader in=new BufferedReader(new InputStreamReader(sClient.getInputStream()));
            BufferedReader keybord = new BufferedReader(new InputStreamReader(System.in));
            PrintWriter out=new PrintWriter(sClient.getOutputStream(),true);
            // boucle demande - réponse
            boolean fini=false;
            String demande;
            String reponse;
            while (! fini){
                // on prépare la demande
                demande = keybord.readLine();
                // on l'envoie
                out.println("CLIENT : "+ demande);
                // on lit la réponse
                reponse = in.readLine();
                // on traite la réponse
                System.out.println(reponse);
                if(demande.equals("quitter")||demande.equals("Quitter")) fini=true;
            }
            // c'est fini
            sClient.close();
        } catch(Exception e){
            // on gère l'exception
          System.out.println("Erreur "+e);
        }
 
    }
 
    public static void main(String[] args) {
        Client client = new Client();
        client.dialoguer();
    }
}
J'espere que vous m'aider, je suis bloqué.
Merci