【问题标题】:Broadcasting from application layer (or a lower layer) [INET 4.1.0]从应用层(或更低层)广播[INET 4.1.0]
【发布时间】:2019-04-16 16:26:44
【问题描述】:

这就是我想要做的:

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

我已阅读this 问题,但我无法找到提到的参数。通过查看inet的developers guide,我也找不到如何将套接字绑定到特定接口。

所以我的问题是:甚至可以从应用层广播吗?

如果是:我必须设置哪些参数?

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

【问题讨论】:

    标签: omnet++ inet


    【解决方案1】:

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

    我通过设置几个 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 了解更多信息。希望这对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-07
      • 2015-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-29
      • 2019-09-29
      • 1970-01-01
      相关资源
      最近更新 更多