networking - multicast sent message cannot be received by computers in one network -


i'm sorry if not useful question. i'm new socket programming. , have build multicast application(with receiver , sender) send message group of hosts in 1 network using multicast. built c on windows using winsock library.

the problem when copied receiver.exe computer(in same network) , run sender.exe, receiver cannot receive message. think network modem need configure recorgnize multicast address. don't understand how network manage multicast group much, multicast address "239.255.10.10" random value.

this sender(for shorter source code, ignored errors checking because no error occured while creating socket or setsockopt, ...):

#define default_addr "239.255.10.10" // random value #define default_port 4321  int main(int argc, char *argv[]) {     wsadata wsadat;     struct sockaddr_in mc_addr;     int sock;     char *message = "my message";     int message_len;     const char mc_ttl = 1;      wsastartup(makeword(2,2), &wsadat)!=0;      // create socket sending multicast address     sock = socket(pf_inet, sock_dgram, ipproto_udp);      // set ttl (time live/ hop count) sender     setsockopt(sock, ipproto_ip, ip_multicast_ttl, &mc_ttl, sizeof(mc_ttl));      memset(&mc_addr, 0, sizeof(mc_addr));     mc_addr.sin_family = af_inet;     mc_addr.sin_addr.s_addr = inet_addr(default_addr);     mc_addr.sin_port = htons(default_port);      message_len = strlen(message);     sendto(sock, message, message_len, 0, (struct sockaddr*)&mc_addr, sizeof(mc_addr));     printf("message sent\n");      system("pause");     closesocket(sock);      wsacleanup(); } 

and receiver:

#define default_addr "239.255.10.10" #define default_port "4321" #define max_len 1024  int main(int argc, char *argv[]) {     wsadata wsadat;     int sock;     int flag_on = 1;     struct sockaddr_in mc_addr;     struct ip_mreq mc_req;     char message[max_len+1];     struct sockaddr_in from_addr;     int from_len;      wsastartup(makeword(2,2), &wsadat);      sock = socket(pf_inet, sock_dgram, ipproto_udp);      setsockopt(sock, sol_socket, so_reuseaddr, (char *)&flag_on, sizeof(flag_on));      memset(&mc_addr, 0, sizeof(mc_addr));     mc_addr.sin_family = af_inet;     mc_addr.sin_addr.s_addr = htonl(inaddr_any);     mc_addr.sin_port = htons(atoi(default_port));      bind(sock, (struct sockaddr *) &mc_addr, sizeof(mc_addr));      /* construct igmp join request structure */     mc_req.imr_multiaddr.s_addr = inet_addr(default_addr);     mc_req.imr_interface.s_addr = htonl(inaddr_any);      /* send add membership message via setsockopt */     setsockopt(sock, ipproto_ip, ip_add_membership, (char*)&mc_req, sizeof(mc_req));      printf("multicast socket ready!/nwaiting message ...\n");      while(1) {         // clear buffer         memset(message, 0, sizeof(message));         from_len  =  sizeof(from_addr) ;          memset(&from_addr, 0,  from_len);           recvfrom(sock, message, max_len, 0,              (struct sockaddr*)&from_addr, &from_len);          printf("received %s %s: ", message, inet_ntoa(from_addr.sin_addr));     } } 

i write

message_len = strlen(message) + 1;

before sending, send terminating null character.

i try test both sender , receiver on same pc understand if network problem or not.


Comments

Popular posts from this blog

python - How to create a legend for 3D bar in matplotlib? -

java - Multi-Label Document Classification -

php - Dynamic url re-writing using htaccess -