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"); < 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. pointeur de char [ par hacker_mt ] Salut tout le monde voici mon code :#include #include void rajout(char ip[15], char *cmd){         int i, j;         for(i=0;i                         CreateProces et fork [ par laetitiavincent ] Bonjour tout le mondeAlors je sais que fork n'existe pas sous windows. On peut utiliser CreateProcess mais mon souci et que je mélange ca avec un sock Probleme de connection a IRC [ par Mamelook ] Bonjour, Sa fait quelque heures que j'essai par tout les moyens de me connecter a un serveur IRC, j'ai esseyer une bonne partie des scripts présent su Envoi structure dans une Socket [ par meastalavista ] Bonjourje programme un client-serveur qui gére des réservations.Au début je voulais me contenter d'envoyer des simples message,mais ca s'est avéré tro Sélection d'octet [ par dayvid75014 ] Bonjour à tous, Je récupère les octets de mon fichier vidéo dans un buffer "Buffer[]" et je voudrais sélectionner les octets 0x47 et je n'y a


Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Appels d'offres

Téléchargements



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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,250 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é.