Bonjour,

j'essaye d'implémenter sous windows un client serveur udp multicast.

le serveur envoie de l'info sur une adresse multicast et un client la récupère.
Mais lors du bind du client j'ai une erreur (-1)
Voici le bout de code du client qui se connect au multicast :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
 
static int init_connection(const char *address, SOCKADDR_IN *sin, struct ip_mreq *mreq)
{
   /* UDP so SOCK_DGRAM */
   SOCKET sock = socket(AF_INET, SOCK_DGRAM, 0);
   struct hostent *hostinfo;
   u_int yes=1;            /*** MODIFICATION TO ORIGINAL */
   if(sock == INVALID_SOCKET)
   {
      perror("socket()");
      exit(errno);
   }
 
   hostinfo = gethostbyname(address);
   if (hostinfo == NULL)
   {
      fprintf (stderr, "Unknown host %s.\n", address);
      exit(EXIT_FAILURE);
   }
 
 
   /**** MODIFICATION TO ORIGINAL */
    /* allow multiple sockets to use the same PORT number */
    if (setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,(char*)&yes,sizeof(yes)) < 0) {
       perror("Reusing ADDR failed");
       exit(1);
       }
 
/*** END OF MODIFICATION TO ORIGINAL */
 
 
   /*(*sin).sin_addr.s_addr = htonl(INADDR_ANY);//*(IN_ADDR *) hostinfo->h_addr;
   (*sin).sin_port = htons(PORT);
   (*sin).sin_family = AF_INET;
    */
   sin->sin_addr.s_addr = htonl(INADDR_ANY);//*(IN_ADDR *) hostinfo->h_addr;
   sin->sin_port = htons(PORT);
   sin->sin_family = AF_INET;
   int error=bind(sock,(struct sockaddr *) sin,sizeof(sin));
   printf("error=%d",error);
   if (error < 0) {
	  perror("bind");
	  exit(1);
     }
 
     /* use setsockopt() to request that the kernel join a multicast group */
     mreq->imr_multiaddr.s_addr=inet_addr(address);
     mreq->imr_interface.s_addr=htonl(INADDR_ANY);
     if (setsockopt(sock,IPPROTO_IP,IP_ADD_MEMBERSHIP,(char*) mreq,sizeof(mreq)) < 0) {
	  perror("setsockopt");
	  exit(1);
     }
 
 
   return sock;
}
Merci par avance.