Multicastgroup

squeaker

Erfahrenes Mitglied
Hi,

ich habe folgendes Problem:
Ich habe in dem Rechner mehrere Netzwerkkarten (mit verschiedenen Netzen/Netzmasken). Ich möchte jetzt in dem einen Netz auf eine Multicastgroup hören. Dazu habe ich folgendes zusammengeschrieben:

Code:
public class Receiver
    {
        private UdpClient socket;

        private bool messageReceived;

        public bool connect(string Adress)
        {
            if (socket != null)
            {
                socket.Close();
            }

            IPAddress ipadresse;
            IPAddress.TryParse(Adress, out ipadresse);

            socket = new UdpClient(new IPEndPoint(ipadresse,5001));

            socket.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);

            IPAddress.TryParse("172.20.0.21", out ipadresse);
            socket.Connect(ipadresse, 5001);

            IPAddress.TryParse("228.5.6.7",out ipadresse);
            socket.JoinMulticastGroup(ipadresse,10);

            socket.BeginReceive(new AsyncCallback(ReceiveCallback), null);

            messageReceived = false;
            while (!messageReceived)
            {
                Thread.Sleep(100);
            }


            return true;
        }

        public void ReceiveCallback(IAsyncResult ar)
        {
            Console.WriteLine("Datagram received");
            messageReceived = true;
        }   
    }

wie man an dem Code sehen kann, möchte ich, dass der UDPReceiver im 172.20er Netz hört und nicht im 10er (mein anderes). Daher habe ich auch die passenden Local/Remote Endpoints übergeben. Allerdings meldet Wireshark, dass das Anmeldetelegramm für die Multicast-Group an das 10er Netz rausgeht und in den ReceiveCallback laufe ich nie hinein. Kann mir jemand sagen, wass ich falsch mache?

ich bin einen Schritt weiter - jetzt geht die Anmeldung über die richtige Netzwerkkarte raus. Dazu musste ich folgendes ändern:
Code:
            IPAddress ipadresse, mcadresse;
            IPAddress.TryParse(Adress, out ipadresse);

            socket = new UdpClient(new IPEndPoint(ipadresse,5001));

            socket.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);

            IPAddress.TryParse("228.5.6.7",out mcadresse);
            //socket.JoinMulticastGroup(ipadresse,10);
            MulticastOption option = new MulticastOption(mcadresse, ipadresse);
            socket.Client.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, option);

            socket.BeginReceive(new AsyncCallback(ReceiveCallback), null);
ich hab also das JoinMulticastGroup(...) manuell über socket.Client.SetSocketOption erledigt. Aber empfangen tue ich immer noch nichts.
 
Zuletzt bearbeitet:
Zurück