[NIO] données 'texte' vers SocketChannel: s'accumule dans le buffer
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):
Code:
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) |
(ps: private ByteBuffer buffer; // buffer défini par défaut, on l'utilise pour écrire/lire les flux
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):
Code:
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 |
Est-ce que j'ai bien identifié ce probleme?
Avez-vous une solution pour contrer ce fait?
Merci de tout coeur !
Cécilia!:oops::oops: