Bonjour,
Voici mon soucis, je voudrais faire un programme basé sur l'architecture Client/Serveur à l'aide des sockets!
J'arrive très bien à faire l'échange tour à tour entre le serveur et le client (c'est à dire que chacun parle chacun leur tour). Mais voila, si l'un des deux, parle deux fois de suite le premier message est envoyé correctement à l'autre mais le second est comme enregistré et directement envoyé lorsque celui reprend la main! N'est pas possible de vider ou désactiver le buffer du clavier après avoir tapé quelque chose?
Voici mes deux classes:
mon Serveur:
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
 
package jabberServer;
 
import java.io.*;
import java.net.*;
import java.util.logging.Level;
import java.util.logging.Logger;
 
public class JabberServer {
 
    public static int PORT = 8080; // Choisir un port hors de la plage 1-1024
 
    public void Traitement() {
        ServerSocket serverSock = null;
        Socket socket = null;
        try {
            serverSock = new ServerSocket(PORT);
 
            try {
                socket = serverSock.accept(); // Le prog stoppe et attend une connexion
            } catch (IOException ex) {
                Logger.getLogger(JabberServer.class.getName()).log(Level.SEVERE, null, ex);
            }
            try {
                // Buffer entrée du socket
                BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                // Buffer sortie vers socket
                PrintWriter out = new PrintWriter(socket.getOutputStream());
 
                String str = new String();
                boolean tour = false;
 
                while (true) {
 
                    // Si c'est à notre tour de jouer
                    if (tour) {
                        // On écrit du texte en paramètre
                        out.println(SaisieCoup());
                        // Envoi dans le flux de sortie
                        out.flush();
                        tour = false;
                    }
                    // En attente du coup de l'autre joueur
                    else {
                        // Récupération du flux
                        str = in.readLine();
                        // Affichage
                        System.out.println("Echoing: " + str);
                        tour = true;
                    }
                }
            } finally {
                System.out.println("closing...");
                socket.close();
            }
        } catch (IOException ex) {
            System.out.println("ERREUR dans le socket du serveur");
        } finally {
            try {
                serverSock.close();
            } catch (IOException ex) {
                System.out.println("ERREUR dans la fermeture du socket");
            }
        }
    }
 
    private String SaisieCoup() {
        String temp = new String();
        // Buffer entrée du clavier
        BufferedReader inputClavier = new BufferedReader (new InputStreamReader(System.in));
        boolean exit = false;
        int resultat = 0;
        while (!exit){
            try {
                System.out.println("Quelle case?");
                temp = inputClavier.readLine();
                try{
                    resultat = Integer.parseInt(temp);
                } catch (NumberFormatException ex) {
                    System.out.println("Veuillez entrer un nombre!");
                }
                if ((resultat > 0) && (resultat < 10)) {
                    exit = true;
                }
 
            } catch (IOException e) {
                System.out.println("ERREUR dans l'entrée calvier");
            }
        }
        return temp;
    }
 
    public static void main(String[] args) {
        JabberServer jabberS = new JabberServer();
        jabberS.Traitement();
    }
}
et mon 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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
 
package jabberClient;
 
import java.net.*;
import java.io.*;
import jabberServer.JabberServer;
 
public class JabberClient {
    public void Traitement() {
        InetAddress addr = null;
        Socket socket = null;
        try {
            addr = InetAddress.getByName("localhost");
            socket = new Socket(addr, JabberServer.PORT);
        } catch (UnknownHostException ex) {
            System.out.println("ERREUR dans l'InetAdress");
        } catch (IOException ex) {
            System.out.println("ERREUR dans le socket");
        }
        try {
            // Affichage des caractéristique du socket
            System.out.println("socket = " + socket);
            // Buffer sortie vers le serveur
            PrintWriter out = null;
            // Buffer entrée du serveur
            BufferedReader in = null;
            try {
                out = new PrintWriter(socket.getOutputStream());
                in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            } catch (IOException ex) {
                System.out.println("ERREUR dans la récupération de l'entrée ou de la sortie du socket");
            }
            String str = new String();
            boolean tour = true;
 
            while (true){
                // Si c'est à nous de jouer
                if (tour) {
                    out.println(SaisieCoup());
                    out.flush();
                    tour = false;
                }
                // En attente du coup de l'autre joueur
                else {
                    str = in.readLine();
                    System.out.println("Echoing: " + str);
                    tour = true;
                }
            }
            //out.println("end");
        } catch (IOException ex) {
            System.out.println("ERREUR dans l'entrée du socket(readline())");
        } finally {
            try {
                socket.close();
            } catch (IOException ex) {
                System.out.println("ERREUR dans la fermeture du socket");
            }
        }
    }
 
    private String SaisieCoup() {
        String temp = new String();
        // Buffer entrée du clavier
        BufferedReader inputClavier = new BufferedReader (new InputStreamReader(System.in));
        boolean exit = false;
        int resultat = 0;
        while (!exit){
            try {
                System.out.println("Quelle case?");
                temp = inputClavier.readLine();
                try{
                    resultat = Integer.parseInt(temp);
                } catch (NumberFormatException ex) {
                    System.out.println("Veuillez entrer un nombre!");
                }
                if ((resultat > 0) && (resultat < 10)) {
                    exit = true;
                }
 
            } catch (IOException e) {
                System.out.println("ERREUR dans l'entrée calvier");
            }
        }
        return temp;
    }
 
    public static void main(String[] args) {
        JabberClient jabberC = new JabberClient();
        jabberC.Traitement();
    }
}
Je me prend la tête

Merci par avance