【发布时间】:2014-09-05 22:51:43
【问题描述】:
我有一个带有两个以太网适配器的 Windows 8 系统(专门用于测试网络内容)。我正在编写一个应用程序,它将在整个本地网络的 4950 端口上发送 "Are you there?" UDP 广播,然后等待来自 FPGA 板的任何响应,即端口 4951 上的 "Yes I'm here."。
问题在于,在 Windows 8 中(也可能在旧版本中),向255.255.255.255 发送广播实际上只选择主网络适配器,但我的应用程序必须向我计算机上的每个网络适配器发送广播。我在 IP 地址169.254.66.143(网络掩码为255.255.0.0)将广播硬编码到我的第二个(非主)NIC,因此应用程序向169.254.255.255 广播,以确定是否有任何板在网络上第二个网卡。
板子本身有一个静态 IP 地址169.254.1.1,所以当我的应用程序通过辅助 NIC 广播时,FPGA 板子接收到广播消息 ("Are you there?")(我可以确认这一点,因为板子会通过串行端口告诉我它收到了以太网广播)。奇怪的是,虽然板子确实在正确的 4951 端口上发回了响应,但我的应用程序从未收到响应,而 Wireshark 在侦听辅助 NIC 时确实看到了响应数据包。
此外,当我在尝试联系任何董事会失败之前和之后运行netstat -s 时,我看到UDP Statistics for IPv4 下的Receive Errors 计数器增加;似乎 Windows 8 丢弃了数据包,因为存在错误,而 Wireshark 接受了数据包(并没有说它有什么问题)。
tl;dr:什么可能导致 Windows 8 丢弃 UDP 数据包,即使 Wireshark 没有显示该数据包有任何问题?
哦,如果有人说“您的 UDP 代码不起作用!”:应用程序正确地听到了来自我的主 NIC 上的板的响应;只有当我将电路板移动到连接到我的辅助 NIC 的路由器时,我的应用程序才会收到响应。
我还禁用了 Windows 防火墙来测试这是否是问题所在;不是。
【问题讨论】: