# Dotnet > Gnral Dotnet > Rseau >  Socket read incomplet

## enboule

Bonjour  tous, 

Petit problme qui a du tre traiter 10 fois dj mais je cherche sur le web et sur ce site et je trouve pas de rponse a mon problme... 

Lorsque je communique avec un serveur j'envoi une requte et ce dernier me rpond. Sauf que la rponse n'est pas complte ... 
Voici la chane que je devrais rcuprer :"0008OKDATA1 0016SESSIONID#11024"

et Voici la chane que je rcupre a la place : "0008OKDATA1" 
Le reste de la chane de caractre ( " 0016SESSIONID#11024" ) se retrouve dans le buffer et  la prochaine requte je la rcupre ... 

je sais pas si je me suis bien exprimer mais voici le code : 



```

```

En gros le systme capte que le message est termin alors qu'il reste encore des octets qui arrivent du serveur. 

J'ai oublier de dire que avec une petite tempo de 500 ms avant le read, tout marche bien ... mais le but est de supprimer cette tempo pour que l'change aille plus vite

----------


## Pol63

ce n'est pas un problme en tant que tel, ca fait partie de la norme tcp (et de beaucoup de communications)

en dbutant on pense qu'on envoie une trame et elle recu de l'autre cot, mais techniquement ce n'est pas ca qui se passe
dj la taille d'une trame est limite, donc si ce qu'on envoie dpasse, c'est envoy en plusieurs fois, mais en plus mme une petite trame peut etre dcoupe
on peut aussi envoyer 2 trames et ca n'en fera qu'une  la rception

il convient donc de grer ceci dans son code, en gnral on utilise un caractre de dbut et de fin de trame, ou un codage qui dfinit en entete la taille de la trame, ce qui permet de dcouper ou de concatner et seulement une fois que la trame est bonne on la traite

ajout  cela, sur certaines comm ou protocoles (udp, serialport) les octets peuvent tre parasits, il faut donc un checksum et une gestion de dchets

sinon il y a des moyens qui permettent de s'affranchir de ces problmes, il y a des classes de haut niveau qui encapsulent la communication, mais il faut dans la plupart des cas maitriser les 2 cts
il y a par exemple WCF ou .net remoting si on a pas accs au framework 3
le principe est de partager des objets .net, appeler une sub depuis le client fait que la sub est excute sur le serveur, avec une fonction on peut au passage retourner quelque chose au client etc...
et dans ce cas wcf s'occupe du dcoupage et du codage des trames

----------


## enboule

Merci d'avoir rpondu aussi rapidement !

Le truc c'est que j'ai pas accs au serveur en question.

Je vais appeler les administrateurs du serveur pour leur expos mon problme ( je voulais pas leur parler car ils me font peur :p ).

Je vais essayer de leur demander si il y'a moyen de rajouter une balise de fin dans la trame.

Merci bien =)

Enboule

----------

