【问题标题】:UDP multicast listener picking up messages from incorrect multicast groupUDP 多播侦听器从不正确的多播组中拾取消息
【发布时间】:2013-02-10 03:59:57
【问题描述】:

我正在编写一个服务,它发送多播消息,以便在网络上我的服务的多个实例之间进行通信。我正在设置两个侦听器并发送两次消息(主 NIC 上的 239.1.1.1,辅助 NIC 上的 239.1.1.2)一切正常,但有时 .2 多播组上的辅助侦听器会接收发送到的消息.1 多播组。知道为什么会发生这种情况吗?

这是我设置听众的方式:

PrimaryLocalEP = new IPEndPoint(primaryNIC.Address, vnc.DefaultUtilityPort);
PrimaryClient.ExclusiveAddressUse = false;
PrimaryClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
PrimaryClient.Client.Bind(PrimaryLocalEP);
PrimaryClient.JoinMulticastGroup(IPAddress.Parse("239.1.1.1"), primaryNIC.Address);
PrimaryClient.MulticastLoopback = false;
PrimaryRemoteEP = new IPEndPoint(IPAddress.Parse("239.1.1.1"), vnc.DefaultUtilityPort);

ReadThread = new System.Threading.Thread(ReadConnection);
ReadThread.IsBackground = true;
ReadThread.Name = "UDPReadConnection";
ReadThread.Start();


SecondaryLocalEP = new IPEndPoint(secondaryNIC.Address, vnc.DefaultUtilityPort);
SecondaryClient.ExclusiveAddressUse = false;
SecondaryClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
SecondaryClient.Client.Bind(SecondaryLocalEP);
SecondaryClient.JoinMulticastGroup(IPAddress.Parse("239.1.1.2"), secondaryNIC.Address);
SecondaryClient.MulticastLoopback = false;
SecondaryRemoteEP = new IPEndPoint(IPAddress.Parse("239.1.1.2"), vnc.DefaultUtilityPort);

ReadThreadSecondary = new System.Threading.Thread(ReadSecondaryConnection);
ReadThreadSecondary.IsBackground = true;
ReadThreadSecondary.Name = "UDPReadConnectionSecondary";
ReadThreadSecondary.Start();

【问题讨论】:

    标签: c# sockets udp multicast


    【解决方案1】:

    简短的回答 - 将它们放在不同的端口上。

    基本上发生的情况是,在 NIC 硬件识别出需要传递数据包之后,即盒子上有一个进程在给定的多播组中具有成员资格,操作系统网络堆栈仅使用端口号来识别等待 UDP 输入的进程.您的两个侦听进程中的哪一个获取数据包本质上是随机的。

    【讨论】:

      【解决方案2】:

      这是因为默认情况下只有一个 NIC 是多播侦听器(由于内部算法取决于接口优先级,因此由操作系统拾取,因此建立的任何 VPN 连接都可能导致问题)。您必须为给定的 NIC 显式设置 SocketOptionName.MulticastInterface 以使其始终参与多播侦听。

      【讨论】:

        猜你喜欢
        • 2014-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-12
        相关资源
        最近更新 更多