Bonjour,
Je vais rester simple sur ce soucis... je simplifie mon problème.
Le serveur envoie des requêtes de manière très soutenue au client qui les analyse.
exemple de requête:
1|Banane
2|Fromage
En fonction de la requête, le client réalise une action différente.
Cas sans erreur, le client reçoit:
01|Fromage
01|Saucisson
02|Banane
01|Raison
De temps en temps, en cas d'erreur.
01|Fromage
01|Saucisson02|Banane <<<<---- error
01|Raison
On observe ici une concatènation des deux requêtes lorsque le client lit dans son
Mon hypothèse: lorsque le client ne peut lire son message et qu'un deuxième arrive très vite derrière, alors il y a 2 messages dans le Buffer du socketChannel du client, du coup on arrive à cet effet
Algo pour écrire (serveur):
(ps: private ByteBuffer buffer; // buffer défini par défaut, on l'utilise pour écrire/lire les flux
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 if(requestCode.compareTo("1") == 0){ // envoie la requête buffer = ByteBuffer.wrap(new String("1|Banane").getBytes()); client.write(buffer);// on envoie le message au client (on écrit dans le buffer du socket)
this.buffer = ByteBuffer.allocateDirect(1024);
SocketChannel client = (SocketChannel) k.channel(); // socketChannel client, celui qui reçoit le message (l'interface qui écoute))
Algo pour écouter (client):
Est-ce que j'ai bien identifié ce probleme?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 if((client.read(buffer)) > 0 ) { buffer.flip(); //data est un tableau de n bytes ou n représente le nombre d'octets a lire dans le buffer byte[] data = new byte[buffer.remaining()]; // on lit le contenu du buffer et on le stocke d'un coup dans data buffer.get(data); // on affiche le contenu de data (et donc du buffer) System.out.println(new String(data)); // c'est ici qui donne 01|Saucisson02|Banane <<<<---- error
Avez-vous une solution pour contrer ce fait?
Merci de tout coeur !
Cécilia!
Partager