Bonjour à tous,
Ceci est mon premier message sur le forum donc j'espère que je poste correctement (j'ai lu une partie de la FAQ et j'ai fait quelques recherches mais j'ai peut être laissé passer certaines choses)
Je suis débutant en programmation et je dois faire un programme avec 2 machines clientes et un serveur. Les 2 machines clientes envoient (avec des sockets UDP) des nombres (pairs pour client1 et impairs pour client2 ) au serveur sur lequel un sniffer sera placé. ( c'est un programme qui testera l'efficacité du wifi lorsque le CSMA/CA est inhibé )
Voila le principe de la partie du programme qui me pose problème:
- Je fait un tableau de "long" avec:
- Je remplie le tableau avec des nombres paires:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 long* tableau = NULL; long nb_envoi = 10; tableau = malloc(nb_envoi * sizeof(long)); // On alloue de la mémoire pour le tableau
- J'envoie chaque case du tableau l'une apres l'autre avec une socket:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 for (i = 0 ; i < nb_envoi ; i++) { tableau[i] = envoi_client +2; //envoi_client étant un "long" initialisé à 0 envoi_client = envoi_client +2; }
et gcc me met à la compilation:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 for (compteur = 0; compteur < nb_envoi; compteur++) { int lg; sprintf( buffer, "%ld", tableau[compteur] ); //mauvaise fonction ? lg = strlen(tableau[compteur]); //probleme ici sendto(sock,tableau[compteur],lg,0,(struct sockaddr *) &server,length); //et probleme ici }
attention : passing argument 1 of ‘strlen’ makes pointer from integer without a cast
attention : passing argument 2 of ‘sendto’ makes pointer from integer without a cast
Donc le type n'est pas le bon. D'apres les MAN des fonctions j'ai:
int sendto(int s, const void *chaine, size_t len, int flags, const struct sockaddr *to, socklen_t tolen);
et
strlen(const char* chaine);
et à l'exécution j'ai une erreur de segmentation
Je pense que je n'envoie pas les bon types aux fonctions "sendto" et "strlen".
Quelqu'un sait comment je peux passer mes valeurs du tableau de "long" à des "char" ? (le sprintf ne m'a pas aidé mais je l'ai peut être mal utilisé ... )
et itoa n'est vraisemblablement pas supporté par GCC.
Merci
nb: Je compile avec gcc sous Mandriva 2008
...et je suis relativement mauvais en programmation (j'ai seulement fait un peu de C/C++ et du Java depuis un an) Je pense que l'erreur est assez simple mais j'ai l'impression qu'il me manque quelques bases![]()
Partager