从应用层(或更低层)广播[INET 4.1.0]

Broadcasting from application layer (or a lower layer) [INET 4.1.0]

所以这就是我想要做的:

通过 UDP(无线方案)向我的邻居广播一些信息,而无需指定 IP 地址(通用的就可以)。所有节点上的端口都相同。传入的数据包应该被相邻节点接受并传递给应用层。

我读过 this question but I was not able to find the mentioned parameter. I also couldn't find out how to bind a socket to a specific interface by looking at the developers guide 的 inet。

所以我的问题是:是否可以从应用层进行广播?

如果是:我需要设置哪些参数?

如果不行:我必须去低层吗?我已经在 inet (inet/applications/ethernet/) 中看到了纯以太网示例,但我如何将其应用于无线场景?

所以我自己发现了。我在这里发布一个答案,以帮助遇到同样问题的其他人。

我通过设置几个 udp 套接字选项解决了这个问题。我设置了以下内容(其中一些不是必需的,但我发现它们很有用):

socket.setMulticastOutputInterface(101);
socket.setMulticastLoop(false);
socket.bind(port);
L3Address address;
L3AddressResolver().tryResolve("224.0.0.1", address);
socket.joinMulticastGroup(address);

setMulticastOutputInterface(101):设置用于广播(多播)我的消息的接口(按 id)。

setMulticastLoop(false):我发现这对防止 ipv4 层发送很有用 多播到我的环回设备。不过这不是必需的。

bind(port):这是只接收具有给定目标端口的udp数据包。也没必要。

joinMulticastGroup(address):这是接受具有给定多播地址的数据包所必需的。

我想象的解决方案会有所不同,但这对我的用例来说很好。我尽量远离低层广播,以避免依赖于特定的低层协议。查看 source code comments 了解更多信息。希望这对某人有所帮助。