Programme multicast en C

superoot

Nouveau membre
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 :
[cpp]
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>


struct in_addr localInterface;
struct sockaddr_in groupSock;
int sd;
int datalen;
char databuf[1024];

int main (int argc, char *argv[])
{
sd = socket(AF_INET, SOCK_DGRAM, 0);
if (sd < 0) {
perror("opening datagram socket");
exit(1);
}

memset((char *) &groupSock, 0, sizeof(groupSock));
groupSock.sin_family = AF_INET;
groupSock.sin_addr.s_addr = inet_addr("225.1.1.1");
groupSock.sin_port = htons(5555);

{
char loopch=0;

if (setsockopt(sd, IPPROTO_IP, IP_MULTICAST_LOOP,
(char *)&loopch, sizeof(loopch)) < 0) {
perror("setting IP_MULTICAST_LOOP:");
close(sd);
exit(1);
}
}
localInterface.s_addr = inet_addr("9.5.1.1");
if (setsockopt(sd, IPPROTO_IP, IP_MULTICAST_IF,
(char *)&localInterface,
sizeof(localInterface)) < 0)
{
perror("setting local interface");
exit(1);
}
datalen = 10;
if (sendto(sd, databuf, datalen, 0,
(struct sockaddr*)&groupSock,
sizeof(groupSock)) < 0)
{
perror("sending datagram message");
}
[/cpp]

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
 

zeb

Modérateur
Tu ne veux pas indenter ton code, s'il te plaît ?

Le prototype de la fonction memset() est dans string.h que tu ne cites pas.
 

superoot

Nouveau membre
merci
par contre j'ai une autre question :
je voudrais que l'utilisateur puisse saisir lui même l'adresse multicast avec la fonction scanf par exemple
dans quel type de variable pourrais-je stocker cette adresse ?
 

zeb

Modérateur
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.
 

guillaumech

Expert
Si tu ne vois pas comment mieux indenter ton code, édite ton fichier sous Vi (vim ou même gvim idem), puis tapes gg=G, et tu verras, comme par magie, le code s'indente tout seul comme un grand.
 

zeb

Modérateur
>>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).
 

Watchwolf

Grand Maître


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

:o
 

NS2rachida

Nouveau membre
Bonjour,
svp je suis debutante avec NS2, je ne connais pas comment simuler un fichier en C++ avec NS2.
je travaille avec NS2.34 sous Linux (CentOs 6.2).
SVP aidez moi si possible
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 132
Messages
6 718 011
Membres
1 586 388
Dernier membre
mery2005
Partager cette page
Haut