首页 > 解决方案 > 如何找到相邻节点的地址和位置坐标?

问题描述

我正在 UnetStack 中实现一个算法,我正在尝试编写一个代理来从相邻节点获取所需的参数。我想向所有相邻节点发送广播消息,这些相邻节点应回复其地址和位置坐标。我该如何实现?我知道我需要访问相邻节点的 NodeInfo 服务,但不确定广播传输和接收要遵循什么服务/协议。

标签: unetstack

解决方案


做这件事有很多种方法:

  1. 您可以RangeReq使用requestLocationset to发送true。这请求对等节点将其位置坐标传回。成功后,您将收到一个已填写RangeNtf的字段。location

使用 2 节点网络的示例 shell 会话:

> ranging << new RangeReq(to: 31, requestLocation: true)
AGREE
ranging >> RangeNtf:INFORM[from:232 to:31 range:999.99976 offset:-348702972
 rxTime:2042489677 peerLocation:1000.0,0.0,-15.0]
  1. 您可以使用远程服务来请求信息。为此,请确保响应节点启用了远程控制 ( remote.enable = true)。然后向它发送一个请求,将它的位置发送给你,你很快就会以RemoteTextNtf.

示例会话:

> rsh 31, '?node.location'
AGREE
[31]: [1000.0, 0.0, -15.0]
  1. 您可以编写自己的代理在每个节点上运行,并DatagramNtf使用您自己的特殊 PDU 监听特定的,并使用从节点信息服务获取的信息来响应那些。这是最灵活的,但需要您从头开始开发代理。

请注意,1 和 2 都不是广播请求,而是对特定节点的请求。如果你想用广播做类似于选项 2 的事情,你可以这样做:

> rsh 0, '?node.location'
AGREE
[31]: [1000.0, 0.0, -15.0]

但请记住,如果所有节点都尝试立即响应,则此垫子不适用于网络拥塞。如果这被证明是一个问题,选项 3 可能是您安排响应以管理网络负载的解决方案。


推荐阅读