gpt4 book ai didi

java - 单网卡多个IP : UDP Broadcast

转载 作者:行者123 更新时间:2023-12-01 04:53:51 27 4
gpt4 key购买 nike

问题:
1- 客户端 1 监听子网 A 的 IP。
2- 服务器向子网 B 发送广播消息。
3- 客户端 1 也通过其位于子网 A 中的 IP 读取此消息。
- 如果消息不是广播而是单播,则不会出现这种情况。

我正在尝试编写一个Java应用程序来监听在单个网络接口(interface)上定义的一些IP和端口。您可以在下面找到我的网络配置示例:


netsh interface ip>show address



Configuration for interface "Local Area Connection"<br/>
DHCP enabled: No<br/>
IP Address: 22.108.131.1<br/>
SubnetMask: 255.255.255.0<br/>
IP Address: 22.108.132.1<br/>
SubnetMask: 255.255.255.0<br/>
IP Address: 22.108.133.1<br/>
SubnetMask: 255.255.255.0<br/>
InterfaceMetric: 0<br/>

我正在打开数据报 channel 并将它们绑定(bind)到这些 IP 地址。对于每个 IP,我都有不同的线程来响应来自 channel 的消息。

现在的情况是,服务器将 UDP 广播消息发送到

22.108.131.255
22.108.132.255
and so on.

但是,例如,在为监听 22.108.131.1 创建的线程中,我收到了发往 22.108.132.255 的广播消息。我使用 Wireshark 检查传入消息,它告诉我消息正确地为 22.108.132.255,但是在我的应用程序中,我看到消息的端点是 22.108.131.1,即监听线程。

起初我以为我的实现是错误的,但更令人惊讶的问题是传入的非广播消息。我的意思是,如果消息的目的地是 22.108.131.1,那么 22.108.132.1 不会收到该消息,这显然是应该的。但我不明白的是,当它涉及广播消息时,为什么它不能像应该的那样运行。

不知道问题是否是windows多IP配置导致的。但我观察到的是操作系统将子网 A 的广播消息传递到子网 B。

另一件事可能是线索,我上面只讨论了 22.108.131.1 和 22.108.132.1,尽管我也定义了 22.108.133.1。如果我不为该IP打开数据报 channel ,我仍然可以从其他IP读取该子网的广播消息。

那么我在这里错过了什么吗?或者是 Windows 网络处理的本质?

最佳答案

以 255 结尾的 IP 是一条广播消息,网络中的每个节点都会听到该消息。

关于java - 单网卡多个IP : UDP Broadcast,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14497486/

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