/!\Comment envoyer par socket des donnees binaires svp
lolman27
Messages postés19Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention22 janvier 2009
-
12 août 2003 à 16:43
fabiencpp
Messages postés18Date d'inscriptionjeudi 7 août 2003StatutMembreDernière intervention13 août 2003
-
13 août 2003 à 11:51
sachant ke la fonctin send nenvoie que des characteres...
si on veut envoyer une chaine comprenant un byte de valeur 0 (qui corespond a un eof en charactere) la chaine est tronker a ce byte
comment faire ? oO
fabiencpp
Messages postés18Date d'inscriptionjeudi 7 août 2003StatutMembreDernière intervention13 août 2003 12 août 2003 à 17:09
Prototype de Send
int Send(char *buff,int size, int flag)
la valeur de retour c'est le nb d'octet reelement envoyé
le char * buff c'est un pointer qui pointe vers une zone de memoire qui contient des octets (peu importe la valeur des octets)
int size c'est la taille de cette zone memoire.
As tu essayer au moins d'envoyé quelquechose.
Parce que a ma connaissance Send se base pas sur un strlen pour derterminer la taille de la zone point par buff mais plutôt du parametre size.
lolman27
Messages postés19Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention22 janvier 2009 12 août 2003 à 17:13
int send (SOCKET s, const char *buf, int len, int flags );
alors pr le 3 eme parametre g mi sizeof(monbuffer)
puisque ds mon prog la variable contenant les donne est tjr pleine
sinon pr fabien
justement la valeur des byte pose pb car la fonction demande un pointeur vers une zone de texte ...a la rencontre d un caracter -1 ou (soit octet de valeur 0)
la fonction croit la chaine terminee
++
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 12 août 2003 à 17:20
Salut,
dans le cas de cette fonction, const char * est un pointeur vers ce que tu veux envoyer (meme si c pas du texte).
Normalement ca envoie le nombre d'octet spétifié par len.
Le prob vient peut etre d'ailleur ?
lolman27
Messages postés19Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention22 janvier 2009 12 août 2003 à 17:25
"le char * buff c'est un pointer qui pointe vers une zone de memoire qui contient des octets (peu importe la valeur des octets)"
ds ce cas i orait eu un void et non un char
je pensais ossi ke la fonction envoyai le nb doctet preciser a partir de ladresse du buff ...
effectivement il envoi le nb doctertt precises ms les octets situe apre le byte 0 ds le buffer son traduit par des byte 0
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 12 août 2003 à 17:44
Tu veux pas mettre un bout de ton code ici ?
Je pense que l'erreur viens pas de send(...).
D'ailleur ca m'etonnerais que send() touche au buffer, il ne fait que lire sur int len octet et envoyer.
lolman27
Messages postés19Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention22 janvier 2009 12 août 2003 à 17:54
arf oui effectivement je coris voir d ou sa viens
du coup ca pause un autre probleme:
g ca:
unsigned char donne[2047];
char * ptr = reinterpret_cast<char *> (& donne);
et je voudrai appeler la fonction send avec comme buffer :
"A" + donne
je c pas comment faire
en tout merci pour votre aide juske la ^^
lolman27
Messages postés19Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention22 janvier 2009 12 août 2003 à 18:08
merci
c vrai que le reinterpret cast etait plus utile apres le bordel que javait tape ^^
sinon ouai je voudrait rajouter un character au debut du buf de facon a pouvoir envoyer ca("X"+ donne)
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 12 août 2003 à 18:12
Le mieux c'est que tu mette ton 'A' avant de remplir ton buffer.
buffer[0] = 'A';
et quand tu veux remplir ton buffer, tu passes buffer+1 comme adresse comme ca le A ne sera pas effacé.
fabiencpp
Messages postés18Date d'inscriptionjeudi 7 août 2003StatutMembreDernière intervention13 août 2003 13 août 2003 à 11:51
la fonction send n'effectue aucune anaylse des data pour determiner la taille du block de memoire que tu lui passe
tu specifie juste la taille de ce block en octet
et si tu fais sizeof(buf) , buf etant un char * tu vas avoir une taille de 4 octets car un pointeur tiens sur 4 octets.
Mais ca tout le sait bien ici.