Problem avec la fonction recv()

dydy -  
fiddy Messages postés 11653 Statut Contributeur -
Bonjour,
mon problem est que quand jenvoi un char a un send() et que je le recoit avec un recv(), le recv() ne le recoi pas corectement. code d'exemple :

************************************************
//cote client


send(sock, "cmd", sizeof("cmd"),0);

//cote serveur

recv(sock, commande, sizeof(commande), 0)

char commande[1024];

if ( commande == "cmd")printf("commande correcte")

else printf("commande incorrecte");

************************************************

je vous en pri aidéer moi j'ai chercher toute la semaine avans de le poster ici.
merci d'avans pour votre aide.
++.
A voir également:

3 réponses

arth Messages postés 10414 Statut Contributeur 1 293
 
Bonjour,

Je comprends pas comment tu fais pour initaliser ta variable après l'avoir utilisé pour ensuite récupérer son contenu :

recv(sock, commande, sizeof(commande), 0)
char commande[1024];


Là ce que tu fais c'est que tu récupères ta valeur dans commande, mais ensuite tu réinitialise commande avec ton char commande[1024]; !!!

Il n'y en a nullement besoin. sinon commande sera toujours vide avant de tester ce qu'il contient.

Et pour vérifier ce qu'il y a dans commande, fais donc un affichage juste après ton recv()
0
dydy
 
je suis desoler j'ai fait une erreur et j'aivait aussi fait un printf met se nestimais pas que c'etais importem.
vola le bon code:

************************************************
//cote client


send(sock, "cmd", sizeof("cmd"),0);

//cote serveur

char commande[1024];

recv(sock, commande, sizeof(commande), 0)

printf("commande : ", commande);

if ( commande == "cmd") printf("commande correcte")

else printf("commande incorrecte");

************************************************

le printf mafiche le bon resulta c'est a dire "cmd".
merci pour ta remarque arth et a ++.
0
dydy
 
je vien de me rendre conte que meme si je compar un char avec une chane de caractere sa ne marche pas
code sans socket:

************************************************

char commande[] = "cmd";

if ( commande == "cmd") printf("commande correcte")

else printf("commande incorrecte");

************************************************
et sa me dit commende incorecte.
aurier vous une idee je suis perdu.
0
fiddy Messages postés 11653 Statut Contributeur 1 847
 
Salut,
C'est normal. En C il n'y a pas surchage de l'opérateur ==. Donc là, tu compares les adresses mémoires qui ne sont pas les mêmes. Pour comparer deux chaînes de caractères, utilise strcmp :
if(strcmp(commande,"cmd")==0) puts("égalité");

Cdlt
0
dydy > fiddy Messages postés 11653 Statut Contributeur
 
je te remerci infiniment pour ta reponce qui marche.
et serait tu comment envoyer une variable de type int avec les sockets.
++
0
fiddy Messages postés 11653 Statut Contributeur 1 847
 
Salut,
Le prototype de recv ou send attend un void*, donc tu peux très bien mettre un entier.
Par exemple :
int a=5;
send(sock,(void*)a,...);


Ou alors tu stockes l'entier dans une chaîne et de l'autre côté tu récupères la chaîne en la convertissant en envier avec strtol
Cdlt
0