这就是我想要做的:
通过UDP(无线场景)向我的邻居广播一些信息,而不必指定IP地址(通用一个就可以)。该端口在所有节点上都将相同。传入的数据包应被相邻节点接受并传递到应用程序层。
我已经读过this问题,但是找不到上述参数。通过查看inet的developers guide,我也找不到如何将套接字绑定到特定接口的方法。
所以我的问题是:甚至可以从应用程序层广播吗?
如果是:我必须设置哪些参数?
如果不可能:我是否必须下一层?我已经在inet(inet/applications/ethernet/
)中看到了纯以太网示例,但是如何将其应用于无线场景?
答案 0 :(得分:0)
所以我自己发现了。我在这里发布答案,以帮助其他人遇到相同的问题。
我通过设置几个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了解更多信息。希望这对某人有帮助。