Socket: envoyer un entier en java, le recevoir en c
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 :
Code:
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);
}
} |
Client :
Code:
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));
} |
Le code est assez volumineux, je n'ai mis que la partie où il y'à un échange à travers le socket.
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.