gpt4 book ai didi

java - 为什么windows桌面不广播UDP?

转载 作者:行者123 更新时间:2023-12-04 09:26:58 30 4
gpt4 key购买 nike

好的,所以我的应用程序是一个点对点聊天应用程序,专为 LAN 通信而设计。发现是通过 UDP 在 UDP 广播地址 (255.255.255.255) 广播 ip 和端口来完成的。我在测试时同时在三个平台上运行它:ubuntu(通过 VirtualBox 的 VM,它通过 VirtualBox Host-Only Ethernet Adapter 连接到网络)、windows 10(我的开发平台,并且“直接”连接到“主”网络,我的路由器,通过我的 wifi 网络适配器),以及在 android 上,它也“直接”连接。
Desktop 和 Ubuntu 共享完全相同的 jar 可执行文件,android 共享相同的网络模型,负责在网络上查找对等点并建立连接,以及在启动时广播客户端。
我再说一遍我运行它的三个平台共享完全相同的网络。
但是,当我首先从 android 和/或 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 以保护我的隐私):
Wireshark network sniffing results
android 和 VM 都正确广播,我手动检查了我使用的是正确的适配器(我在 Windows 上使用我的 wifi 适配器)。
任何线索和帮助 为什么我不直播从 Windows 上,而从其他两个平台上,这很好。提前致谢!

最佳答案

最有可能已解决:我必须绑定(bind)我正在使用的适配器地址,以便 UDP 套接字正确广播,如下所示:

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

关于java - 为什么windows桌面不广播UDP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62970309/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com