2016-07-05 6 views
0

私はマルチキャスティングを使用してメッセージを連続的に送信しているC#ベースのアプリケーションで作業しています。すべてのものがうまく動作します。受信側のクライアントは、ネットワークが切断されるまで継続してメッセージを受信します。しかし、ネットワークに再接続すると、同じネットワーク上のクライアントマシンは、コードを受信して​​同じマシン上のすべてのメッセージを収集するまで、メッセージを受信しません。IpMulticastはネットワークが失われた後に作業を停止し、10-15分後に再接続します。

送信コード:

 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"では再び動作しません。

誰もが、これが起こっている理由とこれに対する有効な解決策の正確な理由を知っています。

答えて

0

「ネットワークが接続されていません」と言われたら、NICを無効にするか物理的に配線を外すと仮定します。

マルチキャストグループに加入している場合、NICドライバは特定のMACアドレスからのトラフィックをリッスンするように指示されます。リンクがダウンするかNICが無効になると、NICドライバはそのマルチキャストグループの受信を停止し、手動で再サブスクライブする必要があります。

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

関連する問題