0

次のコードは、サブネットで UDP マルチキャストのみを受信します。すべてのサブネットから UDP マルチキャストを受信するにはどうすればよいですか?

    sd = socket(AF_INET, SOCK_DGRAM, 0);
    int reuse = 1;
    setsockopt(sd, SOL_SOCKET, SO_REUSEADDR,
            (char *) &reuse, sizeof(reuse));

    memset((char *) &localSock, 0, sizeof(localSock));
    localSock.sin_family = AF_INET;
    localSock.sin_port = htons(1900);
    localSock.sin_addr.s_addr = INADDR_BROADCAST;

    bind(sd, (struct sockaddr*) &localSock, sizeof(localSock));

    group.imr_multiaddr.s_addr = inet_addr("239.255.255.250");
    group.imr_interface.s_addr = inet_addr("192.168.3.2");

    setsockopt(sd, IPPROTO_IP, IP_ADD_MEMBERSHIP,
            (char *) &group, sizeof(group));


    /* Read from the socket. */
4

1 に答える 1

0

192.168.3.2 だけでなく、すべてのインターフェイスを介してグループに参加する必要があります。

また、ソケットを INADDR_BROADCAST ではなく INADDR_ANY にバインドする必要があります。

于 2013-07-12T10:11:44.557 に答える