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 ドライバーはそのマルチキャスト グループのリッスンを停止するため、手動で再サブスクライブする必要があります。

NetworkInformation クラスを使用して、NIC がアップ/ダウンした場合にイベント情報をサブスクライブし、それを使用してそれに応じて再サブスクライブできます。

于 2016-07-21T01:41:57.593 に答える