使用 OT CLI 测试 UDP 功能

<ph type="x-smartling-placeholder"></ph> 在 GitHub 上查看源代码

OpenThread 提供与 Thread 网络搭配使用的 UDP 命令,用于测试点对点连接 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 命令,则使用示例套接字发送消息 发送到在 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 绑定

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

udp open
   Done
   

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

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

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

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

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

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

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

此示例与前一个示例类似, 使用 UDP 套接字使用这种方法,您需要先将套接字连接到 对等套接字地址,则无需指定对等 IP 地址和端口 每次您执行 udp send 操作。

  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 连接

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

    udp send hello
    Done
    

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