Посмотреть исходный код на 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 openDoneНа узле 1 привяжите сокет.
udp bind :: 1234DoneИспользование
::означает, что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 helloDoneЭта команда предполагает, что узел 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 openDoneНа узле 1 привяжите сокет.
udp bind :: 1234DoneНа узле 2 откройте сокет UDP.
udp openDoneНа узле 2 используйте команду
udp connect, чтобы открыть связь с узлом 1.udp connect fdde:ad00:beef:0:bb1:ebd6:ad10:f33 1234DoneПолные варианты
udp connectсм. в разделе udp Connect.На узле 2 используйте команду
udp sendдля отправки сообщения на узел 1, но не указывайтеipиportв синтаксисе командыudp send.udp send helloDoneЕсли не указывать
ipиport, командаudp sendиспользуетipиport, указанные в командеudp connect.