Comment evoyer des entiers par les sockets

cs_JRB Messages postés 28 Date d'inscription samedi 21 juin 2003 Statut Membre Dernière intervention 23 mai 2004 - 14 févr. 2004 à 16:32
cs_JRB Messages postés 28 Date d'inscription samedi 21 juin 2003 Statut Membre Dernière intervention 23 mai 2004 - 7 mars 2004 à 10:18
je n'arrive pas à envoyer des variables declarees integer par socket.
j'utilise :

int nResult = m_ClientSocket[0].Send(LPCTSTR(strTemp), nSize);


strTemp est declare en char mais si je la remplace par une variable int cela cree une erreur.
j'ai le meme probleme pour la reception.
quelqu'un pourrait me dire quelle est la solution à utiliser.

10 réponses

cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
14 févr. 2004 à 17:09
ben envoie la chaine de caracteres associée a ton entier
itoa(ton_entier,buffer,10) pour convertir un entier en sa chaine de caractere en base 10. prevoit un buffer assez grand juste :p (de taille 12 ca suffit...). ca a fait une erreur car strTemp etant censé etre un pointeur vers une chaine de caracteres, si a la place tu mets un entier, ben lors de l'execution le programme va chercher ds la zone memoire dont l'adresse est l'entier ke t'as mis, et celle la a priori ya peu de chances k'elle soit valide
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
14 févr. 2004 à 17:28
peut-être comme ca?

int n;
int nResult = m_ClientSocket[0].Send(&n, sizeof(n));
0
cs_JRB Messages postés 28 Date d'inscription samedi 21 juin 2003 Statut Membre Dernière intervention 23 mai 2004
14 févr. 2004 à 21:00
merci de vos reponses;
en ce qui concerne ton message Cosmobob j'ai ecrit :

	int n = 1;
strTemp = itoa(n,12,10);
int nSize = strTemp.GetLength();

// Envoyer la chaîne
int nResult = m_ClientSocket[0].Send(LPCTSTR(strTemp), nSize);


en compilant j'ai une erreur :

error C2664: 'itoa' : cannot convert parameter 2 from 'const int' to 'char *'

c'est une erreur que j'ai deja eu lors de mes precedents essais et je n'ai jamais reussis a la solutionner, as tu une idee ?

pour ta reponse Vecchio56, sa marche bien(au point de vu de la transmission) mais la conversion se passe mal : genre le 1 se transforme en Î.
j'avais utiliser une methode similaire pour transformer les int en char mais j'avais aboutit sur le meme probleme.

je pense que si tu pouvais m'eclairer sur ta solution Cosmobob et me donner une solution le resultat devrait etre convaincant.
merci encore pour votre aide.
0
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
15 févr. 2004 à 00:29
buffer ca doit etre un pointeur vers un char. genre tu declare avant char buffer[12];
itoa(n,buffer,10); (la ds buffer t'as la chaine de caracteres "12", et tu peux l'envoyer avec ton send.)
note ke si tu fé strTemp = itoa(n,buffer,10);
et ke tu changes buffer plus tard genre si tu fé strcpy(buffer,"48"); ben ton strTemp il pointera vers la chaine "48"

sinon pour faire plus simple des le debut, (cad que tu veux toujours envoyer 1 comme entier), il suffisait de faire strcpy(strTemp,"1"); et la tenvoies le truc ds le send

ou alors si n peut changer, fais directement :

itoa(n,strTemp,10); //place la chaine "1" (si n vaut 1...) dans strTemp

int nSize = strTemp.GetLength();

// Envoyer la chaîne
int nResult = m_ClientSocket[0].Send(LPCTSTR(strTemp), nSize);

et voila... tu feras plus des erreurs comme ca qd t'auras a peu pres pigé les pointeurs.
a++
0

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

Posez votre question
cs_JRB Messages postés 28 Date d'inscription samedi 21 juin 2003 Statut Membre Dernière intervention 23 mai 2004
15 févr. 2004 à 20:36
sa n'a pas marche du premier coup mais je viens de reussir a convertir des entiers et a les envoyer.
il faut penser a ne pas envoyer buffer car c'est un tableau et que sa plante lorsque on laisse :

int nSize = buffer.GetLength();

j'ai tout simplement rajoute la ligne :

CString strTemp = buffer;

et apres on cherche la taille de strTemp.

je pense que sa aurait aussi marche si j'avais remplace :

int nResult = m_ClientSocket[0].Send(LPCTSTR(strTemp), nSize);

par

int nResult = m_ClientSocket[0].Send(LPCTSTR(buffer), 12);

la je peux pas dire je n'ai pas teste cette solution.

sinon j'aimerais une petite precision quand tu dis :

buffer ca doit etre un pointeur vers un char. genre tu declare avant char buffer[12];


je connais pas trop les pointeurs mais je suis surpris quand tu en parles, si tu declares char xxxx, c'est une variable de caractere normal pas un pointeur qui me semble sont toujours caracterises par une etoile qui les precede.
pourrais tu m'eclairer sur cette petite imprecision s'il te plait.

sinon merci a tous pour votre aide qui m'a ete tres precieuse et qui m'a beaucoup apporte.
0
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
16 févr. 2004 à 12:21
ouais normalement les pointeurs sont déclarés avec un * devant, mais si tu déclares char buffer[12], buffer est un pointeur vers la premiere case du tableau (cad ke buffer == &buffer[0] ...)
en gros pour avoir des pointeurs soit lors de la déclaration ya un * devant, soit tas déclaré un tableau d'objets et la c'est automatiquement un pointeur vers la 1ere case du tableau.

"int tableau[10]", tableau est du type int* car tableau désigne l'adresse de la premiere case

voila...
0
cs_JRB Messages postés 28 Date d'inscription samedi 21 juin 2003 Statut Membre Dernière intervention 23 mai 2004
16 févr. 2004 à 21:23
ok merci bien.
0
cs_JRB Messages postés 28 Date d'inscription samedi 21 juin 2003 Statut Membre Dernière intervention 23 mai 2004
21 févr. 2004 à 16:04
est ce que tu connaitrais la commande qui permet d'inverser le truck. c'est a dire de passer les char converti en int.
car a la base c'est des entiers et il faut que je les retrouves a la sortie.
0
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
2 mars 2004 à 12:28
int atoi(char* ). convertit une chaine de caracteres en entier.
0
cs_JRB Messages postés 28 Date d'inscription samedi 21 juin 2003 Statut Membre Dernière intervention 23 mai 2004
7 mars 2004 à 10:18
sa marche
merci pour ton aide
0
Rejoignez-nous