0

我正在开发基于 ac# 的应用程序,该应用程序使用多播连续发送消息。每件事都很好。接收端的客户端不断接收消息,直到网络断开。但是当我重新连接网络时,同一网络上的客户端机器不会收到任何消息,直到我通过接收代码收集同一台机器上的所有消息。

发送代码:

      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”上再次更改。

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

4

1 回答 1

0

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

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

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

于 2016-07-21T01:41:57.593 回答