Problem avec la fonction recv()

dydy -  
fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   -
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 Date d'inscription   Statut Contributeur Dernière intervention   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 Date d'inscription   Statut Contributeur Dernière intervention   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 Date d'inscription   Statut Contributeur Dernière intervention  
 
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 Date d'inscription   Statut Contributeur Dernière intervention   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