2016-07-05 11 views
0

Ich arbeite an einer C# basierten Anwendung, die Nachrichten kontinuierlich mit Multi-Casting sendet. Alles funktioniert gut. Die Clients am Empfangsende empfangen Nachrichten kontinuierlich, bis das Netzwerk getrennt wird. Aber wenn ich das Netzwerk neu anschließe, empfangen die Clientcomputer im selben Netzwerk keine Nachrichten, bis ich alle Nachrichten auf dem gleichen Computer über den Empfangscode gesammelt habe.IpMulticast Stops Arbeiten nach Netzwerk verloren ist und dann wieder verbindet nach 10-15 Minuten

Send-Code:

 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(); 

         } 

       }); 

Erhalten Code:

  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();` 

Es scheint, wie alle Nachrichten an meinem System gesammelt werden immer und es ist ein Netzwerkstau auf der bestimmten Multicast-Adresse zB „239.0. 0,222 ". Als ob ich versuche die Adresse zu ändern funktioniert es aber nicht wieder auf "239.0.0.222".

Jeder kennt den genauen Grund, warum dies passiert und jede gültige Lösung für diese.

Antwort

0

Wenn Sie "Netzwerk ist getrennt" sagen, gehe ich davon aus, dass Sie die Netzwerkkarte deaktivieren oder das Kabel physisch trennen.

Wenn Sie eine Multicast-Gruppe abonnieren, wird der NIC-Treiber angewiesen, den Datenverkehr von bestimmten MAC-Adressen zu überwachen. Wenn die Verbindung unterbrochen wird oder die Netzwerkkarte deaktiviert ist, hört der NIC-Treiber auf, diese Multicast-Gruppe zu hören, und Sie müssen die Wiederanmeldung manuell durchführen.

Sie können die NetworkInformation-Klasse verwenden, um Ereignisinformationen zu abonnieren, wenn eine NIC nach oben/unten geht und diese zum erneuten Abonnement verwendet.