使用 OT CLI 测试 UDP 功能

查看 GitHub 上的源代码

OpenThread 提供 UDP 命令,用于 Thread 网络测试 UDP 套接字之间的点对点通信。cli udp 提供了一个示例套接字,所有 udp 命令都与之交互。

以下示例演示了如何打开和绑定套接字、如何连接套接字,以及如何使用 UDP 套接字发送消息。

UDP 命令

如需查看 udp 命令列表,请输入 help

udp help
bind
close
connect
linksecurity
open
send
Done

open 命令

使用 udp open 命令打开套接字以开始 UDP 通信。 然后,您可以选择将套接字绑定到特定的 IP 地址和端口。

bind 命令

对套接字执行 open 操作后,您可以运行 udp bind 命令,为打开的套接字分配 IPv6 地址和端口。这将绑定套接字以进行通信。分配 IPv6 地址和端口也称为套接字命名。如果您未直接对套接字执行 bind,则连接套接字 (udp connect) 或在 udp send 命令中使用套接字会将套接字绑定到一个临时端口。

connect 命令

udp connect 命令可用于将示例套接字连接到对等套接字地址。然后,您可以发出 udp send 命令向对等端发送消息。如果套接字尚未绑定,则发出 udp connect 命令也会绑定套接字。

send 命令

udp send 命令将使用示例套接字的消息发送到可以使用命令变量指定其 IP 地址和 UDP 端口的目的地。 如果 udp send 命令中未指定 IP 地址和端口,则系统将使用示例套接字将消息发送到 udp connect 命令中指定的目的地。如果套接字尚未绑定,发出 udp send 命令会将套接字绑定到临时端口。

close 命令

建议您在不再需要套接字时使用 udp close 命令关闭套接字。

linksecurity 命令

udp linksecurity 命令可用于为消息启用或停用数据链路层安全。

在两个节点之间发送消息

  1. 在节点 1 上,打开 UDP 套接字。

    udp open
    Done
    
  2. 在节点 1 上,绑定套接字。

    udp bind :: 1234
    Done
    

    使用 :: 表示 bind 应使用未指定的 IPv6 地址,从而使 UDP/IPv6 堆栈分配绑定 IPv6 地址。如需了解 udp bind 的完整选项(例如绑定到网络接口),请参阅 udp bind

1 在节点 2 上,打开 UDP 套接字。

udp open
   Done
   

  1. 在节点 2 上,向节点 1 发送一条简单消息。

    udp send fdde:ad00:beef:0:bb1:ebd6:ad10:f33 1234 hello
    Done
    

    此命令假定节点 2 已发现节点 1 的地址。此外,在本示例中,节点 2 的管理员已选择不绑定套接字。这是因为 Node 2 管理员希望向节点 1 发送消息,而不考虑节点 1 的哪些 IP 地址和端口用作 Node 2 来源。在这种情况下,套接字会随机选择 IP 地址和端口。

    如需了解 udp send 的完整选项,请参阅 udp send

  2. 节点 1 确认收到来自节点 2 的消息:

    5 bytes from fdde:ad00:beef:0:dac3:6792:e2e:90d8 49153 hello
    

将套接字连接到对等套接字地址,然后在两个节点之间发送消息

此示例与上一个示例类似,但演示了使用 UDP 套接字时的一些灵活性。使用此方法时,您需要先将套接字连接到对等套接字地址,然后无需在每次执行 udp send 时都指定对等 IP 地址和端口。

  1. 在节点 1 上,打开 UDP 套接字。

    udp open
    Done
    
  2. 在节点 1 上,绑定套接字。

    udp bind :: 1234
    Done
    
  3. 在节点 2 上,打开 UDP 套接字。

    udp open
    Done
    
  4. 在节点 2 上,使用 udp connect 命令打开与节点 1 的通信。

    udp connect fdde:ad00:beef:0:bb1:ebd6:ad10:f33 1234
    Done
    

    如需了解 udp connect 的完整选项,请参阅 udp connect

  5. 在节点 2 上,使用 udp send 命令向节点 1 发送消息,但不要在 udp send 命令语法中指定 ipport

    udp send hello
    Done
    

    如果未指定 ipportudp send 命令会使用 udp connect 命令中指定的 ipport