为什么 windows 桌面不广播 UDP?

Why doesn't windows desktop broadcast UDP?

好的,我的应用程序是一个点对点聊天应用程序,专为 LAN 通信而设计。发现是通过 UDP 在 UDP 广播地址 (255.255.255.255) 广播 ip 和端口来完成的。我在测试时同时在三个平台上 运行 它:ubuntu(VM 通过 VirtualBox,它通过 VirtualBox Host-Only 以太网适配器连接到网络),windows 10(我的开发平台,并“直接”连接到“主”网络,我的路由器,通过我的 wifi 网络适配器),在 android 上,它也“直接”连接。

Desktop 和 Ubuntu 共享完全相同的 jar 可执行文件,并且 android 共享相同的网络模型,负责在网络上寻找对等点并建立连接,以及广播客户端开始时。

我再说一遍,我运行来自的三个平台共享完全相同的网络。

但是,当我 运行 我的应用程序首先来自 android and/or VM,然后是 windows 10 时,我发现 windows 客户端将不会在广播地址上广播自己,正如我后来使用 wireshark 进行的测试所证实的那样。 Android 并且 VM 将在广播地址上显示为广播,而 windows 10 则不会。

创建发送和接收UDP广播的广播套接字的代码如下,由一个特定的线程处理,没有其他线程可以访问:

public FindPeersBroadcasterRunnable() {
        try {
            broadcastSocket = new DatagramSocket(Constants.UDP_DECLARE_PEERS_PORT);
            broadcastSocket.setBroadcast(true);
            receivePacket = new DatagramPacket(new byte[Constants.MAX_PEER_NOTIFY_LENGTH], Constants.MAX_PEER_NOTIFY_LENGTH);
        } catch (SocketException ex) {
            LOGGER.log(Level.SEVERE, ex.getMessage(), ex);
        }
    }

值得注意的是 Constants.UDP_DECLARE_PEERS_PORT 是 13100。

此外,这些是 WireShark 的结果(隐藏了我的 IP 以保护我的隐私):

android 和 VM 都在正确广播,我已经手动检查我使用的是正确的适配器(我在 windows 上使用我的 wifi 适配器)。

任何线索和帮助为什么我不从windows广播,而从其他两个平台广播都很好。提前致谢!

最有可能解决:我必须绑定我正在使用的适配器地址才能使 UDP 套接字正确广播,因此:

broadcastSocket = new DatagramSocket(Constants.UDP_DECLARE_PEERS_PORT, InetAddress.getByName(IP_HERE));