cs_zzzzzz
Messages postés408Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention18 décembre 2012
-
13 avril 2003 à 16:06
cs_payen
Messages postés252Date d'inscriptionmercredi 25 octobre 2000StatutMembreDernière intervention 1 mai 2005
-
13 avril 2003 à 20:26
Mon client marche c sur et il envoie bien abcd mais monserver marche po je suis debutant en server socket... :(
je sais pas comment faire en sorte que si la command = abcd alors j'ecrie Commande abcd Recu ! j'essaye avec recv ca compile bien mais peut importe le message que j'envoie avec mon client ca dit Commande abcd Recu ! meme si j'envoie pas abcd comme commande :(
cs_Kaid
Messages postés949Date d'inscriptionmardi 2 octobre 2001StatutMembreDernière intervention 8 juillet 20061 13 avril 2003 à 16:49
- En fait recvfrom() doit te retourner un message d'erreur car tu dois d'abord appeller accept() (Acception d'un client) et ensuite appeller recvfrom() pour récupérer tes données. Si mes souvenirs dans la matière sont bons, accept() te renvois un nouveau socket et c'est ce socket que tu dois passer en paramètre à recvfrom().
- Ensuite il faut allouer de la mémoire pour "buf" soit statiquement, soit dynamiquement. Si tu laisses ton code tel quel ca va planter.
- Oui, buf = "abcd" est archi-faux, c'est une erreur classique de débutant. Pour comparer deux chaines de caractères en c, il faut utiliser la fontion strcmp().
cs_payen
Messages postés252Date d'inscriptionmercredi 25 octobre 2000StatutMembreDernière intervention 1 mai 2005 13 avril 2003 à 16:56
alors l, ca me sembletressimple : ton if n'est pas valide!!! enfin si il l'est, mais la condition est toujours vraie!avec ca, ca risque de mieux marcher : if (buf == "abcd").
toujours 2 signes dans les tests ... (sauf < et >) ...
cs_zzzzzz
Messages postés408Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention18 décembre 2012 13 avril 2003 à 18:33
merci a vous 2 je vais voir si j'y arrive deja j'ai ajouter les 2 == et ca me marque plus que la commande abcd a été recue. maintenant je vais essayer de comprendre un peu mieux strcmp(); encore merci !
cs_Kaid
Messages postés949Date d'inscriptionmardi 2 octobre 2001StatutMembreDernière intervention 8 juillet 20061 13 avril 2003 à 18:37
C'est une erreur de débutant de tester le contenu d'une chaine de caractères comme tu viens de le faire. Ca marche seulement si buf est un objet et que l'opérateur == a été redéfinie.
cs_Kaid
Messages postés949Date d'inscriptionmardi 2 octobre 2001StatutMembreDernière intervention 8 juillet 20061 13 avril 2003 à 20:19
En fesant ca, c'est une comparaison entre adresses que fait le compilateur et non une comparaison de chaines. Voici un exemple:
#include <stdlib.h>
#include <string.h>
#include
int main(int argc, char* argv[])
{
Définition de deux chaines identiques char* chaine1 = "Bonjour";
char* chaine2 = "Bonjour";
strdup() permet de dupliquer une chaine en mémoire (allocation + copie)
char* chaine3 = strdup("Bonjour");
On n'affiche le contenu et l'adresse des deux premières chaines. Tu remarques que les adresses sont identiques cout<<"Chaine 1 -"<<chaine1<<"- Adresse: "<<hex<<(long)chaine1<<endl;
cout<<"Chaine 2 -"<<chaine2<<"- Adresse: "<<hex<<(long)chaine2<<endl;
Ca à l'air de fonctionner correctement if (chaine1 = = chaine2)
cout<<"Les adresses sont identiques"<<endl;
else
cout<<"Les adresses sont diffèrentes"<<endl;
On n'affiche le contenu et l'adresse de la troisième chaine. Tu remarques que les chaines sont strictement identiques mais que les adresses sont différentes
cout<<"Chaine 1 -"<<chaine1<<"- Adresse: "<<hex<<(long)chaine1<<endl;
cout<<"Chaine 3 -"<<chaine3<<"- Adresse: "<<hex<<(long)chaine3<<endl;
Voila le problème, la comparaison ne fonctionne pas if (chaine1 == chaine3)
cout<<"Les adresses sont identiques"<<endl;
else
cout<<"Les adresses sont diffèrentes"<<endl;
Aucun problème avec strcmp()
if (strcmp(chaine1,chaine3) ==0)
cout<<"Les chaines sont identiques"<<endl;
else
cout<<"Les chaines sont diffèrentes"<<endl;
return 0;
}
De plus, les deux premières chaines n'ont pas forcément la même adresse, cela dépend des compilateurs. Certains optimisent et regroupent tous les chaines identiques dans un espace mémoire alors que d'autres allouent systématiquement un espace mémoire par chaine.