Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : pb abonnement pour socket multicast [ Windows / Réseau & Internet ] (Spiffou)

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

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,624 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.