Se connecter avec
S'enregistrer | Connectez-vous

Programme multicast en C

Dernière réponse : dans Programmation

bonjour,
j'ai un petit soucis dans mon code lors de la compilation et je ne comprend pas l'erreur.
c'est un code de diffusion multicast sous unix (j'utilise une version Ubuntu).
voici le code :
  1. #include <sys/types.h>
  2. #include <sys/socket.h>
  3. #include <arpa/inet.h>
  4. #include <netinet/in.h>
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7.  
  8.  
  9. struct in_addr localInterface;
  10. struct sockaddr_in groupSock;
  11. int sd;
  12. int datalen;
  13. char databuf[1024];
  14.  
  15. int main (int argc, char *argv[])
  16. {
  17. sd = socket(AF_INET, SOCK_DGRAM, 0);
  18. if (sd < 0) {
  19. perror("opening datagram socket");
  20. exit(1);
  21. }
  22.  
  23. memset((char *) &groupSock, 0, sizeof(groupSock));
  24. groupSock.sin_family = AF_INET;
  25. groupSock.sin_addr.s_addr = inet_addr("225.1.1.1");
  26. groupSock.sin_port = htons(5555);
  27.  
  28. {
  29. char loopch=0;
  30.  
  31. if (setsockopt(sd, IPPROTO_IP, IP_MULTICAST_LOOP,
  32. (char *)&loopch, sizeof(loopch)) < 0) {
  33. perror("setting IP_MULTICAST_LOOP:");
  34. close(sd);
  35. exit(1);
  36. }
  37. }
  38. localInterface.s_addr = inet_addr("9.5.1.1");
  39. if (setsockopt(sd, IPPROTO_IP, IP_MULTICAST_IF,
  40. (char *)&localInterface,
  41. sizeof(localInterface)) < 0)
  42. {
  43. perror("setting local interface");
  44. exit(1);
  45. }
  46. datalen = 10;
  47. if (sendto(sd, databuf, datalen, 0,
  48. (struct sockaddr*)&groupSock,
  49. sizeof(groupSock)) < 0)
  50. {
  51. perror("sending datagram message");
  52. }


et voici l'erreur après lors de la compilation avec gcc :
Dans la fonction «main» :
23: attention : incompatible implicit declaration of built-in function «memset»

Savez vous pourquoi cette erreur ?
avez vous une solution ?
d'avance, merci

Autres pages sur : programme multicast

Lassé par la pub ? Créez un compte
Expert Programmation

Tu as une drôle de façon d'indenter ton code. Ce n'est pas juste histoire de critiquer gratuitement. Si l'usage d'indenter et d'aérer le code est toujours si vivace chez les développeurs, c'est qu'il y a une très bonne raison. Merci d'avoir modifier ton code. Je ne te demande pas de le remodifier mais penses-y. C'est une bonne façon de mieux "voir" son code et donc de le debugger plus facilement. Conseil de vieux routard. :o 

Ohlala ! Fuis comme la peste la fonction scanf(). Je t'invite plutôt à utiliser la fonction gets() ou encore mieux, fgets() sur stdin.

La variable est donc un tableau de char. D'où l'idée de fgets() pour empêcher les débordements. Utilise le retour de la fonction inet_addr() pour vérifier la validité de la saisie.

A ce propos, où es-tu allé chercher ce code ?
Si tu es débutant (comme le trahissent tes questions et la présentation de ton code ;) ), cherche et trouve des exemples plus modernes. Typiquement, la fonction inet_addr() est obsolète. On lui préfère la fonction inet_aton() aujourd'hui.
Expert Programmation

>>gg=G
guich > Tu tapes ça où ? (Je vérifie ça ce soir, dès que je suis sous Linux :o )

superoot> Pour la mise en forme de ton code, regarde du côté de cb(1), indent(1), voire bcpp(1).

zeb a dit :
>>gg=G
guich > Tu tapes ça où ? (Je vérifie ça ce soir, dès que je suis sous Linux :o )

superoot> Pour la mise en forme de ton code, regarde du côté de cb(1), indent(1), voire bcpp(1).


gg -> aller au début du document
= commencer a indenter
G -> la fin du document

:o 
Lassé par la pub ? Créez un compte