Bonjour,
Je doit envoyer un entier à travers un socket, d'un server java vers un client en c. Mon problème est que le résultat est très instable. Si je lance ma requête 5 fois de suite, cela peut fonctionner 2 fois et m'afficher 3 messages d'erreurs. Voici mon code :
Server :
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 void handleRequest() throws IOException { myClientSocket = myServerSocket.accept(); try{ InputStream inputS = myClientSocket.getInputStream(); OutputStream outputS = myClientSocket.getOutputStream(); BufferedOutputStream bufferOut = new BufferedOutputStream(outputS); dis = new DataInputStream(inputS); dos = new DataOutputStream(outputS); list(); dis.close(); dos.close(); } catch (IOException e) { System.out.println(e.getMessage()); } myClientSocket.close(); } public void list() throws IOException { HashMap<Integer, HotelRoom> list; list = hotel.getAvailableRooms(); Iterator it = list.keySet().iterator(); int key, tmp; HotelRoom room; while(it.hasNext()) { key = (Integer) it.next(); room = list.get(key); // write type tmp = room.getType(); dos.writeInt(tmp); // write nbRoom tmp = room.getNbRooms(); dos.writeInt(tmp); // write the price tmp = room.getPrice(); dos.writeInt(tmp); } }
Le code est assez volumineux, je n'ai mis que la partie où il y'à un échange à travers le socket.
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 for(i = 0; i < nbType; i++) { while(read(mySocket, &type, sizeof(int)) != sizeof(int)) { printf("Error during the read 1\n"); exit(0); } while(read(mySocket, &nbRoom, sizeof(int)) != sizeof(int)) { printf("Error during the read 2\n"); exit(0); } while(read(mySocket, &price, sizeof(int)) != sizeof(int)) { printf("Error during the read 3\n"); exit(0); } printf("Type %d : %d rooms free for the price %d.\n", ntohl(type), ntohl(nbRoom), ntohl(price)); }
Je pense que l'erreur vient de la lecture en c. A chaque fois que je ne lit pas size(int), j'affiche un message et je fait un exit(). Si je ne fait pas cette exit(), l'entier lu peut être n'importe quoi.
Savez vous comment faire pour que le read() fonctionne à chaque fois ?
Merci.
Partager