局域网中的一台 PC 无法使用 UDP 广播

局域网中的一台 PC 无法使用 UDP 广播

我有一个程序,它会定期广播一条简单的 UDP 消息以表明在 LAN 中的存在。我有一台笔记本电脑和一台台式电脑,它们都通过 Wifi 连接到家庭路由器。两台电脑都运行 Windows。

我注意到台式电脑可以检测到笔记本电脑的存在。但是笔记本电脑无法检测到台式电脑的存在。即使它们运行的​​是完全相同的代码。

使用 Wireshark 后,我发现无论我在哪台计算机上运行 Wireshark,桌面->笔记本电脑消息都不会显示。但是,无论我在哪台计算机上运行 Wireshark,笔记本电脑->桌面消息都会显示在 Wireshark 中。

我也尝试使用我的 Android 手机作为路由器,得到了完全相同的结果。

我想知道是否有任何 Windows 设置可以阻止从台式机发送到笔记本电脑的消息。

编辑:

我已经使用“数据包发送器”来消除我的应用程序可能存在的任何问题。

当我从我的广播一个数据包时桌上型电脑,则该消息不会出现在两台计算机中的任何一台的 Wireshark 中。如果该消息是单播的,则该消息会出现在两台计算机的 Wireshark 中。

使用数据包发送器笔记本电脑,广播的数据包在两台计算机的Wireshark中均有注册。

Wireshark 没有在台式电脑中记录发出的广播消息,这很奇怪,不是吗?这让我认为问题不在于路由器,而在于电脑本身。

编辑2:

所以我发现了一些有趣的东西。如果我将广播地址从 改为 ,255.255.255.255它就192.168.0.255可以正常工作!为什么会这样呢?

答案1

终于找到了我的问题。

我注意到,如果我进行广播192.168.0.255而不是255.255.255.255它,它就会起作用。

经过进一步调查,我注意到该ipconfig命令在我的台式电脑中返回了一堆适配器。

在此处输入图片描述

看起来 VirtualBox 安装在我的系统中添加了一堆虚拟适配器。

使用 Wireshark,我确认消息通过了错误的适配器。因此消息没有进入我的 LAN。

在我的笔记本电脑中,我没有任何虚拟适配器,这就是它使用 255.255.255.255 的原因。

为了修复程序中的问题,并使其能够适应不同的 LAN 配置,我没有将 192.168.0.255 硬编码为广播地址。我所做的是循环遍历所有适配器并向每个适配器广播。您需要将广播地址计算为ip_address | ~subnet_mask

答案2

https://serverfault.com/questions/219764/255-255-255-255-vs-192-168-1-255

IP 地址 255.255.255.255 有特殊定义。它是零网络或 0.0.0.0 的广播地址,在 Internet 协议标准中代表此网络,即本地网络。根据定义,向此地址的传输受到限制,因为它永远不会由连接本地网络到其他网络的路由器转发。

相关内容