/* multicast datagram test listener */ #include #include #include #include #include #include #include #include #include #include #include #define BPORT 53000 int main(int argc, char** peer) // peer = bport { int sockfd, x, y,result, plen, mlen, blen; unsigned char buffer[512]; // send buffer unsigned char rcvbuff[512]; // receive buffer struct sockaddr_in peeraddr; // used by sendto struct sockaddr_in raddr; // used by recvfrom struct ip_mreq mreq; unsigned char uc; sockfd = socket(AF_INET,SOCK_DGRAM,0); raddr.sin_family = AF_INET; raddr.sin_addr.s_addr = inet_addr("224.0.0.146"); raddr.sin_port = htons(atoi(peer[1])); plen = sizeof(peeraddr); mlen = sizeof(raddr); bind(sockfd,(struct sockaddr*)&raddr,mlen); memcpy(&mreq.imr_multiaddr,&raddr.sin_addr,sizeof(raddr.sin_addr)); mreq.imr_interface.s_addr = htonl(INADDR_ANY); setsockopt(sockfd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mreq,sizeof(mreq)); uc = 1; setsockopt(sockfd,IPPROTO_IP,IP_MULTICAST_TTL,&uc,sizeof(uc)); uc = 1; setsockopt(sockfd,IPPROTO_IP,IP_MULTICAST_LOOP,&uc,sizeof(uc)); sprintf(buffer,"hello"); result = recvfrom(sockfd,rcvbuff,512,0,(struct sockaddr*)&peeraddr,&plen); result = sendto(sockfd,buffer,strlen(buffer)+1,0, (struct sockaddr*)&peeraddr,plen); close(sockfd); exit(0); } // main