如何从特定IP发送多播数据?

时间:2014-09-03 09:54:35

标签: sockets networking multicast setsockopt

我正在尝试从先前添加到接口的别名IP向组播组发送数据。我用IP_MULTICAST_IF和别名IP调用setsockopt()。但是数据总是从该接口的默认IP发送。为了解释,我提供了一些代码。

ip addr show命令为ens33接口提供以下输出:

2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:4c:78:71 brd ff:ff:ff:ff:ff:ff
    inet 192.168.190.183/24 brd 192.168.190.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.190.50/24 scope global secondary ens33
       valid_lft forever preferred_lft forever

现在setsockopt()用作:

struct in_addr localInterface;
localInterface.s_addr = inet_addr("192.168.190.50");

    if(setsockopt(sd, IPPROTO_IP, IP_MULTICAST_IF, (char *)&localInterface, sizeof(localInterface)) < 0)
    {
        perror("Setting local interface error");
        exit(1);
    }
    else
    {
        printf("Setting the local interface...OK\n");
    }

但是,它总是从192.168.190.183发送多播数据包,并且在setsockopt()期间不会抛出任何错误。

有人能解决这个问题吗?请帮忙。提前谢谢。

1 个答案:

答案 0 :(得分:1)

IP_MULTICAST_IF是关于接收的。它是关于通过其发送加入和离开消息的NIC,这反过来决定了您将从谁接收多播

如果您想通过特定的NIC或IP地址发送,请使用bind().