Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1889 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Problème de reception socket

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème de reception socket

n°985330
k2rfr
Posté le 17-02-2005 à 20:00:46  profilanswer
 

Bonsoir,  
J’en appelle à votre aide car je débute en programmation et je rencontre certaines difficultés.
Je m’essaye à la communication par socket et j’ai un problème avec la réception des données.
Ainsi lorsque j’envoie depuis mon client une trame par exemple de 4 caractères mon serveur reçoit aléatoirement soit les 5 caractères soit autant de caractères qu’il y a dans mon buffer de réception.      
J’aimerai trouver une solution pour toujours obtenir la même trame.  
Exemple :

Code :
  1. byte[] b_buffer=new byte[10];
  2. client.Receive(b_buffer);
  3. /* j’obtient aléatoirement  dans le buffer «allo\0\0\0\0\0\0» (ce que je souhaite) ou bien «allo125658» */


 
Merci de votre aide  :hello:  

mood
Publicité
Posté le 17-02-2005 à 20:00:46  profilanswer
 

n°985341
oliv5
Pourquoi ? Parce que !
Posté le 17-02-2005 à 20:14:22  profilanswer
 

Facile. Je suppose que client est un objet de type socket, et que tu travailles en TCP (ie mode connecté).
 
Dans la fonction receive, tu peux spécifier le nombre d'octets max à lire d'un coup.
Le code le plus correct est celui là, je pense.
 

Code :
  1. int nbOctetsRecus=0;
  2. int length=4;
  3. do
  4. {
  5. nbOctetsRecus=client.Receive(b_buffer,4-length,length,SocketFlags.None);
  6. length-=nbOctetsRecus;
  7. }while(length>0 && nbOctetsRecus>0); //si nbOctetsRecus==0 alors la connexion a été coupée
  8. // ici, ton buffer est plein (length==0), ou alors la connexion a été coupée (nbOctetsRecus==0)
  9. if (nbOctetsRecus>0)
  10. {
  11. //La trame est bonne, il reste à la lire
  12. }
  13. else
  14. {
  15. //Connexion perdue :)
  16. }


n°985343
oliv5
Pourquoi ? Parce que !
Posté le 17-02-2005 à 20:15:58  profilanswer
 

Petite précision : rien ne t'assure que tu va recevoir 4 octets d'un coup (même si c'est quasi certain), d'où la petite boucle qui attends qu'on au bien recu 4 octets (length passe de 4 à 0), et qui décale l'endroit ou on écrit dans le buffer (4 - length).

n°985347
k2rfr
Posté le 17-02-2005 à 20:21:53  profilanswer
 

Merci de ton aide  ;)  
Et si je ne connais pas la taille de la trame que je vais recevoir ?  :??:

n°985355
oliv5
Pourquoi ? Parce que !
Posté le 17-02-2005 à 20:26:19  profilanswer
 

bein tu met une length suffisemment grande avec un buffer de meme taille derrière.
Le souci, c'est que si tu connais pas la taille, il va te falloir un autre moyen de détecter que la trame est finie, ce qui veut dire, il va te falloir un protocole de communication derrière.
 
Ex à la con : un entier sur 32 bits en début de chaque trame qui indique la taille de la trame qui vient.

n°985367
k2rfr
Posté le 17-02-2005 à 20:42:03  profilanswer
 

Merci beaucoup , je m'en douté un peu mais j'avais l'éspoir qu'il y ai un truc ... merci de ton aide  :jap:  :jap:

n°985377
k2rfr
Posté le 17-02-2005 à 20:53:01  profilanswer
 

Et pour la curiosité, quelqu'un pourrait me dire pourquoi des fois j'ai la trame que je désire et l'instant d'après j'ai un truc différent ? :sweat:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Problème de reception socket

 

Sujets relatifs
Makefile : problème avec les wildcard %problème de comparaison.. apparemment
problème fichier en PERLproblème avec fonction FOREACH
Problème de Procedure avec liste chainée et fichierprobleme d'insertion dans Mysql avec easyphp
Probleme avec request.getRequestDispatcher()PROBLEME AVEC " mms:// "
Problème d'overflow d'un cadre sur IE : ça foire en largeur [Résolu]problème filtrage données table
Plus de sujets relatifs à : Problème de reception socket


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR