【问题标题】:UdpClient does not receive multicast packets occasionallyudpClient 偶尔收不到组播包
【发布时间】:2013-04-27 22:02:10
【问题描述】:

我编写了一个服务器应用程序,它应该在几个指定的接口上发送和监听 upnp 数据包(但是当只有一个网卡时问题已经存在)。代码很简单,很简单,但我面临着一个非常奇怪的行为。

我有一个端点列表(接口的 IP 地址),应用程序应该监听并向其发送消息,然后使用以下代码为每个端点创建一个 UdpClient:

private UdpClient c;
private IPEndPoint ep;
public MyClass(IPAddress ip)
{
    ep = new IPEndPoint(ip, 1900);
    c = new UdpClient(ep);
    c.JoinMulticastGroup(IPAddress.Parse("239.255.255.250"));
    c.BeginReceive(onReceive, null);
}

我每分钟发送一个数据包,没有任何问题

byte[] msg = System.Text.Encoding.ASCII.GetBytes(discoverMessage);
c.Send(msg, msg.Length, new IPEndPoint(IPAddress.Parse("239.255.255.250"), 1900));

客户端对此做出响应,我的接收函数被调用。

 protected void onReceive(IAsyncResult r)
 {
     IPEndPoint rep = new IPEndPoint(IPAddress.Any, 0);
     string msg = Encoding.ASCII.GetString(c.EndReceive(r, ref rep));
     <-- do other things -->
     c.BeginReceive(onReceive, null);
 }

但有时它只是不接收任何数据包,即我的接收功能根本没有被触发,尽管它们肯定会进来(我可以用wireshark看到它们,我知道客户端将它们发送到网络) .

解决这个问题的“解决方法”是重新启动应用程序,禁用/启用接口,重新启动(访客)机器,更改端点列表(例如包括 0.0.0.0) - 老实说,我还没有找到解决方案/解决方法,但结合起来似乎可以解决问题。一旦它再次工作,我可以复制旧配置,一切都像以前一样工作(所以配置很好,恕我直言)。

我在 Windows Server 2012 上使用 .NET 4.5,在 Windows 8 上的 Hyper-V 来宾中运行,带有 2 个虚拟网卡的 atm,一个连接内部用于管理,并连接到我的未共享的物理网卡与主机并连接到客户端网络。

有没有人遇到过类似的问题?我在想 Wireshark 或 winpcap 是否会导致问题,因为当我使用它们来跟踪任何问题时有时会发生这种情况。还是hyper-V虚拟网卡有问题?或者,我更喜欢的是,我在我的代码中做错了什么?

【问题讨论】:

    标签: multicast udpclient


    【解决方案1】:

    UDP 是一种“有损”协议。 See here。如果您想要可靠性,您需要实现错误控制或切换到内置的 TCP/IP

    【讨论】:

    • 这就是客户端发送数据包两次的原因 :) 但这不是问题,根据wireshark UDP 数据包到达机器。
    • 嗯...现在它变成了一个有趣的问题。你是在源机器还是目标机器上检查这个?
    • 问题不在于某些数据包丢失,当问题开始时所有数据包都“丢失”了几个小时(意味着它们在wireshark中可见但未调用接收函数)。
    • 你在接收器上使用wireshark吗?
    • 我发现了一些可能感兴趣的东西stackoverflow.com/a/12835032/1121879
    【解决方案2】:

    如果您有多个网卡,igmp 加入请求将发送到哪个网络?

    您可能希望使用 JoinMulticastGroup 方法的两个参数版本,以便您可以包含要在其上查找多播流量的特定本地接口 IP 地址。这在机器具有多个物理 NIC 并提供对多个网络的访问的情况下尤其相关。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-11
      • 1970-01-01
      • 2011-09-24
      • 2018-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多