指定发送组播IGMP JOIN的接口(c# socket)

问题描述 投票:0回答:1

我想选择用哪个网络接口来发送加入请求,这是我试过的代码,但我觉得不对。

static int GetNicIndexByIP(String ipAddress)
{
    int adapterIndex = -1;
    IPAddressInformation[] adapterIPs;

    foreach (NetworkInterface adapter in nics)
    {
        adapterIPs = adapter.GetIPProperties().UnicastAddresses.ToArray();
        adapterIndex = (int)IPAddress.HostToNetworkOrder(adapter.GetIPProperties().GetIPv4Properties().Index);

        foreach (IPAddressInformation ip in adapterIPs)
        {
            if (ip.Address.ToString() == ipAddress)
                return adapterIndex;
        }
    }

    return -1;
}


string nicAddress = "192.168.1.100";
string multicastAddress = "229.1.0.1";
int nicIndex = GetNicIndexByIP(nicAddress);
Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

// first try: ignored (sent from another interface)
client.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastInterface, nicIndex);
client.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(IPAddress.Parse(multicastAddress)));

// second try: error argument "229.1.0.1" out of range
client.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(IPAddress.Parse(multicastAddress), nicIndex));
c# sockets multicast
1个回答
0
投票

如果有人感兴趣,我自己找到了答案。

MulticastOption mcastOption = new MulticastOption(IPAddress.Parse(multicastAddress), IPAddress.Parse(nicAddress));
client.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, mcastOption);
© www.soinside.com 2019 - 2025. All rights reserved.