Envoyer un entier avec send()

Résolu
nostalgius Messages postés 18 Date d'inscription mercredi 28 janvier 2009 Statut Membre Dernière intervention 22 juillet 2011 - 23 mai 2010 à 14:07
nostalgius Messages postés 18 Date d'inscription mercredi 28 janvier 2009 Statut Membre Dernière intervention 22 juillet 2011 - 24 mai 2010 à 23:11
Salut tout le monde..
Voilà, tout est dans le titre du poste, j'ai bon cherché, j'arrive pas à envoyer un simple int par la fonction send(), c'est dû à la nature de données pouvant être envoyé par send (chaine de caractères), j'ai essayé d'envoyé mon entier sous forme de chaine, puis à l'arrivée de récupérer sa valeur:
** Coté envoyeur:
char data[]="Hello.";
char t_donnees_a_recevoir[10] = {0};
sprintf(t_donnees_a_envoyer, "%d", strlen(data));
send(sur_socket, t_donnees_a_envoyer, strlen(t_donnees_a_envoyer), 1)

** Coté recepteur:
char t_donnees_a_recevoir[10] = {0};
char* data;
recv(sur_socket, t_donnees_a_recevoir, sizeof(int), 1)
int taille = atoi(t_donnees_a_recevoir);

Un merci d'avance

5 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
23 mai 2010 à 22:01
recv(sur_socket, t_donnees_a_recevoir, sizeof(int), 1);
sizeof(int) comme longueur de buffer ???

char buf[16];
int len;
len = recv(sur_socket, buf, 16, 0);
et pour assurer une chaine valide:
if(15 < (DWORD) len) len = 15;
buf[len] = 0;

ciao...
BruNews, MVP VC++
3
nostalgius Messages postés 18 Date d'inscription mercredi 28 janvier 2009 Statut Membre Dernière intervention 22 juillet 2011
23 mai 2010 à 14:24
Salut tout le monde..
Voilà, tout est dans le titre du poste, j'ai bon cherché, j'arrive pas à envoyer un simple int par la fonction send(), c'est dû à la nature de données pouvant être envoyé par send (chaine de caractères), j'ai essayé d'envoyé mon entier sous forme de chaine, puis à l'arrivée de récupérer sa valeur:
** Coté envoyeur:
char data[]="Hello."; 
char t_donnees_a_recevoir[10] = {0}; 
sprintf(t_donnees_a_envoyer, "%d", strlen(data)); 
send(sur_socket, t_donnees_a_envoyer, strlen(t_donnees_a_envoyer), 1);


** Coté recepteur:
char t_donnees_a_recevoir[10] = {0}; 
char* data; 
recv(sur_socket, t_donnees_a_recevoir, sizeof(int), 1); 
int taille = atoi(t_donnees_a_recevoir); 


Voilà c'est plus joli comme ça
0
nostalgius Messages postés 18 Date d'inscription mercredi 28 janvier 2009 Statut Membre Dernière intervention 22 juillet 2011
24 mai 2010 à 01:02
Merci pour cette réponse aussi rapide ,
oui, je me suis dis que c'était un entier à l'origine, donc vaut mieux lui reserver une taille d'entier .
pour la valeur 16 que vous avez choisi comme taille, ça ne posera pas de problème, si la chaine envoyée était d'une longueur inférieur à 16? une autre question si c'est pas trop abusé de ma part: c'est quoi le DWORD , là sur le code ça m'a l'air d'un cast, c'est quoi au juste?? juste une dernière vous me conseillez d'utiliser la fonction atoi() pour récupérer de nouveau mon entier ou y a-t-il d'autres alternatives pour y arriver.
Merci encore pour la reponse . je vais essayer avec ça pour voire.
@+++
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
24 mai 2010 à 08:38
DWORD : unsigned long 32 bits

atoi() va impec.

ciao...
BruNews, MVP VC++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nostalgius Messages postés 18 Date d'inscription mercredi 28 janvier 2009 Statut Membre Dernière intervention 22 juillet 2011
24 mai 2010 à 23:11
Merci encore
0
Rejoignez-nous