Посмотреть исходный код на GitHub
OpenThread предлагает команды 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 которого можно указать с помощью командных переменных. Если IP-адрес и порт не указаны в команде udp send
, сообщение отправляется с использованием примера сокета в пункт назначения, указанный в команде udp connect
. Выдача команды udp send
привязывает сокет к временному порту, если сокет еще не был привязан.
команда close
Рекомендуется использовать команду udp close
для закрытия сокета, когда сокет больше не нужен.
команда linksecurity
Команда udp linksecurity
может использоваться для включения или отключения безопасности канального уровня для сообщений.
Отправить сообщение между двумя узлами
На узле 1 откройте сокет UDP.
udp open
DoneНа узле 1 привяжите сокет.
udp bind :: 1234
DoneИспользование
::
означает, чтоbind
должна использовать неуказанный адрес IPv6, тем самым стек UDP/IPv6 назначает IPv6-адрес привязки. Полные параметрыudp bind
, такие как привязка к сетевому интерфейсу, см. в разделе привязка udp .
1. На узле 2 откройте сокет UDP.
udp open
Done
На узле 2 отправьте простое сообщение на узел 1.
udp send fdde:ad00:beef:0:bb1:ebd6:ad10:f33 1234 hello
DoneЭта команда предполагает, что узел 2 уже обнаружил адрес узла 1. Кроме того, в этом примере администратор узла 2 решил не привязывать сокет. Это связано с тем, что администратор узла 2 хочет отправить сообщение на узел 1, не заботясь о том, какие из его IP-адресов и портов используются в качестве источника узла 2. В этом сценарии сокет выбирает IP-адрес и порт случайным образом.
Полные параметры
udp send
см. в разделе Отправка по протоколу udp .Узел 1 подтверждает получение сообщения от Узел 2:
5 bytes from fdde:ad00:beef:0:dac3:6792:e2e:90d8 49153 hello
Подключите сокет к адресу однорангового сокета, затем отправьте сообщение между двумя узлами.
Этот пример похож на предыдущий, но демонстрирует некоторую гибкость использования сокетов UDP. Используя этот метод, вы сначала подключаете сокет к адресу однорангового сокета, после чего вам не нужно указывать IP-адрес и порт однорангового узла каждый раз, когда вы выполняете udp send
.
На узле 1 откройте сокет UDP.
udp open
DoneНа узле 1 привяжите сокет.
udp bind :: 1234
DoneНа узле 2 откройте сокет UDP.
udp open
DoneНа узле 2 используйте команду
udp connect
, чтобы открыть связь с узлом 1.udp connect fdde:ad00:beef:0:bb1:ebd6:ad10:f33 1234
DoneПолные варианты
udp connect
см. в разделе udp Connect.На узле 2 используйте команду
udp send
для отправки сообщения на узел 1, но не указывайтеip
иport
в синтаксисе командыudp send
.udp send hello
DoneЕсли не указывать
ip
иport
, командаudp send
используетip
иport
, указанные в командеudp connect
.