从所有网络适配器向239.255.255.253(端口:427)发送多播并接收消息C#

从所有网络适配器向239.255.255.253(端口:427)发送多播并接收消息C#,c#,networking,multicast,C#,Networking,Multicast,我在一个特定的netwrok适配器上用Wireshark录制了一个序列 在那里,我看到了从我的一个网络适配器到239.255.255.253的传出多播。然后是来自具有特定IP地址的“设备”的响应 我已经拥有的: public List<IPAddress> GetLocalNetworkInterfaces() { localNetworkInterfaces = new List<IPAddress>(); foreach (NetworkInterf

我在一个特定的netwrok适配器上用Wireshark录制了一个序列

在那里,我看到了从我的一个网络适配器到239.255.255.253的传出多播。然后是来自具有特定IP地址的“设备”的响应

我已经拥有的:

public List<IPAddress> GetLocalNetworkInterfaces()
{
    localNetworkInterfaces = new List<IPAddress>();

    foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
    {
        foreach (var unicastIp in nic.GetIPProperties().UnicastAddresses)
        {
            if (nic.OperationalStatus == OperationalStatus.Up && unicastIp.Address.AddressFamily == AddressFamily.InterNetwork
                && !IPAddress.IsLoopback(unicastIp.Address))
            {
                localNetworkInterfaces.Add(unicastIp.Address);

            }
        }
    }

    return localNetworkInterfaces;
}


public void SendMultiCast(List<IPAddress> iPAddresses, int port)
{
    responseOfAvailableVehicles = new List<string>();
    string availableVehicle;

    if (iPAddresses.Count != 0)
    {
        try
        {
            foreach (IPAddress iPAddress in iPAddresses)
            {
                IPAddress address = iPAddress;
                byte[] response;
                long longFromIP = 4026531837; //Is 239.255.255.253
                port = 427;


                UdpClient udpClient = new UdpClient(new IPEndPoint(address, 0));
                udpClient.Client.ReceiveTimeout = 3000;

                // Here start Multicast
                // And receive response
                var endpoint = new IPEndPoint(longFromIP, port);
                udpClient.EnableBroadcast = true;

                udpClient.Send(DiscoveryPayload, DiscoveryPayload.Length, endpoint);
                response = udpClient.Receive(ref endpoint);

            }

        }
        catch (Exception ex)
        {

        }

    }
}
公共列表GetLocalNetworkInterfaces() { localNetworkInterfaces=新列表(); foreach(NetworkInterface.GetAllNetworkInterfaces()中的NetworkInterface nic) { foreach(nic.GetIPProperties().unicastaddress中的变量unicastIp) { 如果(nic.OperationalStatus==OperationalStatus.Up&&unicastIp.Address.AddressFamily==AddressFamily.InterNetwork &&!IPAddress.IsLoopback(unicastIp.Address)) { localNetworkInterfaces.Add(unicastIp.Address); } } } 返回本地网络接口; } 公共void发送多播(列出IP地址、int端口) { responseOfAvailableVehicles=新列表(); 字符串可用车辆; if(ipaddress.Count!=0) { 尝试 { foreach(IP地址中的IP地址) { IP地址=IP地址; 字节[]响应; long longFromIP=4026531837;//是239.255.255.253 端口=427; UdpClient UdpClient=新的UdpClient(新的IPEndPoint(地址,0)); udpClient.Client.ReceiveTimeout=3000; //这里开始多播 //并收到回复 var端点=新的IPEndPoint(longFromIP,端口); udpClient.EnableBroadcast=true; 发送(DiscoveryPayload、DiscoveryPayload.Length、endpoint); 响应=udpClient.Receive(ref端点); } } 捕获(例外情况除外) { } } } 老实说,我不确定这种方法是否正确,或者我是否完全走错了方向


如何使用C#发送多播并接收响应?

除非您更改设备中的设置,否则路由和服务器通常不会转发广播消息。多播是一种UDP广播消息。您可能需要将设备更改为不阻止任何通信的简单集线器。假设路由和服务器转发广播消息。如何继续?我现在用
udpClient.Send
扩展了整个程序。但在这里,我得到了一个“套接字操作引用了不可用的网络”异常。@AlexF,但我不想将其发送到广播地址,只想发送到239.255.255.253。我还可以使用广播地址吗?它不是一个多播地址,而是您将它发送到一个特定的IP地址。