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 : 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)
(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 : 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
Est-ce que j'ai bien identifié ce probleme?
Avez-vous une solution pour contrer ce fait?


Merci de tout coeur !

Cécilia!