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

  FORUM HardWare.fr
  Programmation
  C++

  [ C, C++] SOCKET : format des donnees envoyees avec fonction send()

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[ C, C++] SOCKET : format des donnees envoyees avec fonction send()

n°237394
Le_Chab
Posté le 30-10-2002 à 16:43:44  profilanswer
 

Question :
 
avec la fonction send() j'ai l'impression que le seul type de donnee que je peux envoyer sont soit des caracteres ASCII ou des char (de 0 a 127) ? Or je voudrais envoyer des unsigned char, est ce qu'il y a une solution ?
 
 :(


Message édité par Le_Chab le 30-10-2002 à 18:03:19
mood
Publicité
Posté le 30-10-2002 à 16:43:44  profilanswer
 

n°237507
pascal_
Posté le 30-10-2002 à 18:07:21  profilanswer
 

Citation :


est-il possible d'envoyer autre chose que du char* via la fonction send  


 
  L'argument de la fonction send est un char*, mais en fait
il faut plutôt le comprendre comme du void*.
  Send n'en a rien à faire que tu envoies des éléments de
tel ou tel type. Il lui faut juste la taille de ce qu'il
y a à envoyer et l'addresse mémoire ou c'est placé.
  Tu peux donc faire un send sur n'importe quoi, il faut
juste caster en char* pour le compilateur.
 
  Une question que je me pose, c'est pourquoi ils ont mis
des char* ? (je sais juste que c'est une veille habitude
en C, mais pas plus)
 
  Dernierement, un petit conseil : évite de mettre des tonnes
de ligne de code sur le forum : c'est inutile, illisible et
surtout ça donne la désagréable impression d'un "tenez  
démerdez-vous avec ça"

n°237508
pascal_
Posté le 30-10-2002 à 18:09:09  profilanswer
 

mince, pas cool de changes ton texte quand je tape une
réponse... :-)

n°237513
Le_Chab
Posté le 30-10-2002 à 18:19:44  profilanswer
 

pascal_ a écrit a écrit :

Citation :


est-il possible d'envoyer autre chose que du char* via la fonction send  


 
  L'argument de la fonction send est un char*, mais en fait
il faut plutôt le comprendre comme du void*.
  Send n'en a rien à faire que tu envoies des éléments de
tel ou tel type. Il lui faut juste la taille de ce qu'il
y a à envoyer et l'addresse mémoire ou c'est placé.
  Tu peux donc faire un send sur n'importe quoi, il faut
juste caster en char* pour le compilateur.
 
 



 
 
OK j'essaie ca !
 
 
je suis daccord avec le fait que trop de code c'est penible, raison pour laquelle je l'ai enleve  :)  :)

n°237779
Le_Chab
Posté le 31-10-2002 à 10:31:12  profilanswer
 

bon apres essai de ta methode ca ne marche pas mieux ... la j'en suis a envoyer mes donnees sous forme de char* et je les caste sous forme d'unsigned char a l'arrivee, la ca marche....  
 
j'ai cependant un  autre soucis, dans le flux de donnee que je voudrai envoyer, je voudrai envoyer egalement du texte,  
 
un truc du genre "01f124ac4557erreur dans procedure proc"
 
quelqu'un aurait une solution pour ca ???  

n°237813
kenshiro18​2
Posté le 31-10-2002 à 11:10:31  profilanswer
 

Le_Chab a écrit a écrit :

j'ai cependant un  autre soucis, dans le flux de donnee que je voudrai envoyer, je voudrai envoyer egalement du texte,  
 
un truc du genre "01f124ac4557erreur dans procedure proc"
 
quelqu'un aurait une solution pour ca ???  
 




 
Ben faut que tu definisses un format pour tes donnees echangees.
Exemple:
 
- 1 octet: type a definir par toi meme.
- 1 int: longueur des donnees
- N octets: donnees
 
Apres si tu veux envoyer le texte "coucou" (supposons que tu as une classe de socket):
 

Code :
  1. const char *txt = "coucou";
  2. char type = MSG_TEXT;
  3. socket.send(&type, sizeof(type));
  4. int len = strlen(txt);
  5. socket.send(&len, sizeof(len));
  6. socket.send(txt, len);
  7. pour recevoir, c'est symetrique.
  8. char type = 0;
  9. int len;
  10. // a faire: verifier qu'on a recu 1, 4 et N octets
  11. socket.recv(&type, sizeof(type));
  12. socket.recv(&len, sizeof(len));
  13. char *pbuff = new char[len+1];
  14. socket.recv(pbuff, len);
  15. pbuff[len] = '\0';
  16. std::cout << "On nous a dit: << pbuff << std::endl;

n°237821
mrbebert
Posté le 31-10-2002 à 11:16:37  profilanswer
 

Attention tout de même, dans le cas où tu échanges des données entre 2 machines différentes : toutes ne codent pas les entiers de la même façon.
Si tu envoies l'entier sur 4 octets 0x00000001, tu risques de recevoir 0x01000000.
Regarde les fonction htonl, ntohl, htons, ntohs.
 
Il n'y a pas ce problème pour les caractères où les entiers sur 1 octet.

n°237903
Le_Chab
Posté le 31-10-2002 à 11:34:39  profilanswer
 

je regarde tout ca ! merci a tous !


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [ C, C++] SOCKET : format des donnees envoyees avec fonction send()

 

Sujets relatifs
quelle est la fonction pour récupérer un caractére sans taper entréetransfert de data d'un fichier csv dans une base de données mysql
Maquette 'interactive' : données stockées en local ?[Postgresql] perte de données lors d'insertion en charge
Div et variable, placer un div en fonction d'une variable ??qqn connait une fonction qui met une chaine de cara en majuscules ??
SQL SERVER et la fonction TRIM[VB(A)] Problème avec la fonction API DeleteMenu. . .
[C] Problème très con sur une fonction apparemment super simpleAfficher des données dynamiques sur plusieurs pages
Plus de sujets relatifs à : [ C, C++] SOCKET : format des donnees envoyees avec fonction send()


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