IpMulticast在网络丢失后停止工作,然后在10-15分钟后重新连接

时间:2016-07-05 14:45:24

标签: c# sockets multicast multicastsocket

我正在开发一个基于c#的应用程序,它使用Multi-casting连续发送消息。一切都很好。接收端的客户端不断接收消息,直到网络断开。但是,当我重新连接网络时,同一网络上的客户端计算机不会收到任何消息,直到我通过接收代码收集同一台计算机上的所有消息。

发送代码:

      using (UdpClient udpclient = new UdpClient())
                    {
                        IPAddress multicastaddress = IPAddress.Parse("239.0.0.222");
                        try
                        {
                            udpclient.ExclusiveAddressUse = false;
                            udpclient.MulticastLoopback = false;
                            udpclient.JoinMulticastGroup(multicastaddress);
                            IPEndPoint remoteep = new IPEndPoint(multicastaddress, 8191);

                            int j = udpclient.Send(byteBuffer, byteBuffer.Length, remoteep);

                        }
                        catch (Exception e)
                        {
                            udpclient.DropMulticastGroup(multicastaddress);
                            udpclient.Close(); 
                        }
                        finally
                        {
                          udpclient.DropMulticastGroup(multicastaddress);
                          udpclient.Close();

                        }

                });

接收代码:

            var udpClientDispose = new UdpClient(_settingsViewModel.SyncPort);

            var ipEndPoint = new IPEndPoint(IPAddress.Any, 8191);
            IPAddress multicastaddress = IPAddress.Parse("239.0.0.222");
            udpClientDispose.JoinMulticastGroup(multicastaddress, "192.168.0.12");
            var timeElapsedSinceMasterMessageReceived = new Stopwatch();
            Stopwatch sw = new Stopwatch();
            sw.Start();
            while (sw.ElapsedMilliseconds < 5000)
            {
                udpClientDispose.Receive(ref ipEndPoint);

            }
            udpClientDispose.Close();`

似乎所有消息都在我的系统中收集,并且特定多播地址上存在网络堵塞,即“239.0.0.222”。好像我试图改变它的工作地址而不是“239.0.0.222”。

任何人都知道发生这种情况的确切原因以及任何有效的解决方案。

1 个答案:

答案 0 :(得分:0)

当您说“网络已断开连接”时,我将假设您禁用了NIC或物理拔下电线。

如果您订阅了多播组,则会指示NIC驱动程序侦听来自特定MAC地址的流量。当链路断开或NIC被禁用时,NIC驱动程序将停止侦听该多播组,您必须手动重新订阅。

如果NIC上升/下降并使用它来相应地重新订阅,您可以使用NetworkInformation类订阅事件信息。