java udp组播数据包,UdpClient偶尔不会收到组播数据包

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

我有一个 endpoints 列表(接口的IP地址),应用程序应该监听并发送消息,然后使用以下代码为每个 endpoints 创建一个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));

c.BeginReceive(onReceive, null);

}

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

解决此问题的“解决方法”是重新启动应用程序,禁用/启用接口,重新启动(来宾)计算机,更改 endpoints 列表(例如包括0.0.0.0) - 老实说,我还没有找到解决方案/解决方法但这种组合似乎解决了这个问题 . 一旦它再次工作,我可以复制旧的配置,一切都像以前一样工作(所以配置很好,imho) .

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值