Bonjour à tous,

En vue de faire un jeu simple en réseau, j'essai de réaliser un échange d'entier en utilisant les sockets.

Hélas mon programme ne marche pas correctement.
En théorie, le serveur doit envoyer un entier entré au clavier par l'utilisateur, puis lire un entier que lui envoie le client. Cette séquence s'effectue 5 fois de suite.

Le problème est qu'après avoir entré le premier entier au clavier coté serveur, le client agit comme s'il avait reçu 2 entiers.

Voici les deux classes :

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
import java.net.*;
 
public class Server {
   static final int port = 8080;
 
   public static void main(String[] args) throws Exception {
 
       ServerSocket Ssoc = new ServerSocket(port);
       System.out.println("Server : Attente de connexion");
 
       Socket Csoc = Ssoc.accept();
       System.out.println("Server : Connexion établie");
 
       InputStream  IS = Csoc.getInputStream();
       OutputStream OS = Csoc.getOutputStream();
 
       DataOutputStream DOS = new DataOutputStream(OS);
       DataInputStream DIS = new DataInputStream(IS);
 
        InputStreamReader isr=new InputStreamReader(System.in);
        BufferedReader br=new BufferedReader(isr);
 
       for(int i=0 ; i<5 ; i++){
            System.out.println("Server : Quel entier souhaitez-vous envoyer ?");
            DOS.writeInt(br.read());
            DOS.flush();
            System.out.println("Server : Entier reçu : "+ DIS.readInt());
       }
       Ssoc.close();
   }    
}
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
package applettest;
 
import java.io.*;
import java.net.*;
public class Client {
   static final int port = 8080;
 
   public static void main(String[] args) throws Exception {
 
         Socket soc = new Socket("192.168.6.107", port);
 
         InputStream IS = soc.getInputStream();
         OutputStream OS = soc.getOutputStream();
 
         DataOutputStream DOS = new DataOutputStream(OS);
         DataInputStream DIS = new DataInputStream(IS);
 
         for(int i=0 ; i<5 ; i++){
             System.out.println("Client : Entier reçu : "+DIS.readInt());
             DOS.writeInt(666);
             DOS.flush();
 
         }
         soc.close();
   }
}

Voici ce que donne les sorties :

Coté 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
Server : Attente de connexion
Server : Connexion établie
Server : Quel entier souhaitez-vous envoyer ?
2
Server : Entier reçu : 666
Server : Quel entier souhaitez-vous envoyer ?
Server : Entier reçu : 666
Server : Quel entier souhaitez-vous envoyer ?
1
Server : Entier reçu : 666
Server : Quel entier souhaitez-vous envoyer ?
Server : Entier reçu : 666
Server : Quel entier souhaitez-vous envoyer ?
2
Server : Entier reçu : 666
Coté client :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
Client : Entier reçu : 50
Client : Entier reçu : 10
Client : Entier reçu : 49
Client : Entier reçu : 10
Client : Entier reçu : 50

Ca ressemble à une erreur de tampon mal vidé, mais je ne vois pas trop comment le résoudre (si c'est bien cela).


Une petite idée ?