begin process at 2010 02 10 17:39:18
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

Réseau & Internet

 > 

pb abonnement pour socket multicast


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

pb abonnement pour socket multicast

vendredi 7 septembre 2007 à 12:33:56 | pb abonnement pour socket multicast

Spiffou

bonjour à tous,

je rencontre un problème de programmation réseau sur les sockets (c++ sous visual studio).
Je cherche à programmer une classe de gestion du multicast (udp) qui ne manipule qu'un seul socket pour envoyer et recevoir.
Cette classe est déjà fonctionnelle en unicast et les échanges en localhost fonctionnent sans aucun probleme (gestion des E/S avec select).
cependant pour gérer le multicast, il faut que je m'abonne au canal de diffusion, et c'est là que les problème commencent: l'abonnement ne marche pas, et ma commande
"err =setsockopt(_socket, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char*) &stMreq, sizeof(stMreq));"
me renvoie -1 en permanence...

voila ce que je fais:
_socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP/*0*/); // creation socket

int val = 1;
error = setsockopt(_socket, SOL_SOCKET, SO_REUSEADDR, (char *)&val, sizeof(int));
error = setsockopt(_socket, SOL_SOCKET, SO_BROADCAST, (char *)&val, sizeof(int));

// set non-blocking socket
mode = 1; // non bloquant si != 0
error = ioctlsocket(_socket, FIONBIO, &mode);
error = ioctlsocket(_socket, FIONREAD, &mode);

// on spécifie le port à utiliser port = 5000
dsock.sin_addr.s_addr = htonl(INADDR_ANY);
dsock.sin_family = AF_INET;
dsock.sin_port = htons((u_short)port);
error = bind(_socket, (sockaddr *)(&dsock), sizeof(sockaddr_in));

// renseignement de l'@ destination destIp = 224.0.1.1
sockaddr_in fsock;
fsock.sin_addr.s_addr = inet_addr(destIp);
fsock.sin_port = htons((u_short)destPort);
fsock.sin_family = AF_INET;

// autorise à recevoir les msg venant de l'@ de l'envoyeur
u_char loop = 1;
error =setsockopt(_socket, IPPROTO_IP, IP_MULTICAST_LOOP, (char*) &loop, sizeof(u_char)); // ??????

// définition de l'abonnement
struct ip_mreq stMreq;
stMreq.imr_multiaddr.s_addr = fsock.sin_addr.s_addr;
stMreq.imr_interface.s_addr = INADDR_ANY;
error =setsockopt(_socket, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char*) &stMreq, sizeof(stMreq)); // ??????
// là ce me renvoie tjs "-1" arrgghhhh!!!

// envoie des données
nbSend = sendto(_socket, (char *)msg, msgSize, 0, (sockaddr *)(&fsock), sizeof(sockaddr_in));


à la suite de tout ca, les données semblent être envoyées, mais le select ne "détecte" rien et du coup je n'appelle pas ma procedure pour la réception... mais ca j'imagine que c'est normal de pas etre notifier des messages circulant sur un canal multicast auquel on est pas abonné...
/!\ ATTENTION, je fais la procedure de réception (select et recvfrom) avec la même socket!

note: à priori, pas de problème réseau ou autre car j'ai réussi à faire marcher un petit programme de test client/server en multicast sur ma machine...

voila la situation. si quelqu'un saurait me dire ce qui cloche, ca m'aiderait bien.
lundi 10 septembre 2007 à 16:16:00 | Re : pb abonnement pour socket multicast

Spiffou

Réponse acceptée !
bon ben en fait la solution etait toute bete (j'ai honte), j'avais inclus winsock.h et non pas winsock2.h (en mm tps visual aurait pu me faire une erreur qd même)...
cette erreur corrigée tout va forcément beaucoup mieux avis aux amateurs, soyez pas distrait.

@+


Cette discussion est classée dans : ip, socket, char, addr, multicast


Répondre à ce message

Sujets en rapport avec ce message

Socket -> Ip [ par CyberP ] Comment obtenir l'adresse ip (sous forme de char* : xxx.xxx.xxx.xxx) à partir d'un objet socket (je ne veut pas d'objet SOCK_ADDR mais une ip en char* mail - socket - pk sa déconne ?!? [ par Gendal67 ] Bonsoir,Alors la, jvous en prie aidez moi avant que je ne prenne mon clavier, ma souris, mon modem et tout le reste et que je les cognent du +fort que redirection pour socket [ par darkkinj ] Voila, je me suis mis à la programmation sous windows. Je suis en train de réaliser un chat tout simple où chaque client se connecte au serveur centra [ C ] Socket en C avec DynDNS ou NO-IP [ par Nostaroth ] Bonjour, j'ai essayé de modifier le code suivant information_sur_la_destination.sin_addr.s_addr=inet_addr("10.10.10.10"); < Problème adresse ip et inet_addr [ par Spiffou ] Bonjour à tous, une petite question qui reste sans réponse et très mystérieuse pour moi (ou alors c'est tellement gros que depuis que je me pose la qu Pb d'adresse IP pour transfert UDP unicast [ par Spiffou ] Double post car erreur de theme sur le 1er post.Bonjour à tous, une petite question qui reste sans réponse et très mystérieuse pour moi (ou alors c'es programmation socket [ par hanaw ] Comment écrire un programme simple communication client serveur en TCP/IP en C qui retourne au serveur un message contenant l'adresse IP du client. Socket sur WAN [ par galmone ] Bonjour,Voila mon probleme, j'ai une application client et une server, les 2 communiquent a merveille sur la loopback adresse (127.0.0.1-255), en LAN gethostbyname [ par BloP68 ] Bonsoir tout le monde,Je suis actuellement en train d'écrire un logiciel de chat.Je souhaite récuperer l'adresse du serveur grâce à la fonction "getho programmation socket [ par samijaba ] je suis entraint de dévélopper une application réseaux (client/serveur)mon probléme est que lorsque j'essai de connecter hors de réseau local il n'y a


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,359 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales