mafulechka
mafulechkaМаусым 10, 2019, 4:01 Т.Ж.

QtCoAP-ке кіріспе

Это клиентская реализация Constrained Application Protocol (Протокола ограниченных приложений (CoAP)) для Internet of Things (Интернета вещей). Библиотека предоставляет быстрый и простой способ использования протокола CoAP в ваших кроссплатформенных приложениях Qt. Как было объявлено ранее, QtCoAP будет доступен в новом выпуске Qt 5.13 как часть Qt for Automation вместе с другими реализациями протокола IoT, такими как MQTT, KNX и OPC UA.


Что такое CoAP?

CoAP был разработан, как облегченный протокол обмена данными между компьютерами (M2M), который может работать на устройствах с ограниченным объемом памяти и вычислительных ресурсов. Он основан на концепции RESTful APIs и очень похож на HTTP.

CoAP имеет архитектуру «клиент-сервер» и использует запросы GET, POST, PUT и DELETE для взаимодействия с данными. Но в отличие от HTTP, он использует облегченный UDP для переноса вместо TCP. Кроме того, он поддерживает некоторые интересные функции, такие, как многоадресные запросы, обнаружение ресурсов и наблюдение.

Благодаря низким расходам и простоте CoAP стал одним из популярных протоколов IoT для использования на встроенных устройствах. Он действует, как своего рода HTTP для встроенного мира.

Обзор реализации QtCoAP

QtCoAP поддерживает следующие функции:

  • Наблюдение за ресурсами.
  • Обнаружение ресурсов.
  • Групповое общение (многоадресная передача).
  • Блочные переводы.
  • Безопасность.

Библиотека действительно проста в использовании. Вам просто нужно создать экземпляр объекта QCoapClient и подключить его сигналы:

QCoapClient client;
connect(&client, &QCoapClient::finished, this, &CoapHandler::onFinished);
connect(&client, &QCoapClient::error, this, &CoapHandler::onError);

Теперь вы готовы отправлять запросы и получать ответы:

// GET requests
client.get(QUrl("coap://127.0.0.1:5683/resource"));
// or simply
client.get(QUrl("127.0.0.1/resource"));

// PUT/POST requests
QFile file("data.json");
// ...
client.post(QUrl("127.0.0.1/resource"), file.readAll());
client.put(QUrl("127.0.0.1/resource"), file.readAll());

// DELETE requests
client.deleteResource(QUrl("127.0.0.1/resource"));

Используя класс QCoapRequest , вы можете передавать параметры и настраивать ваши запросы. Например:

QCoapRequest request;
request.setUrl(QUrl("127.0.0.1"));
request.setPayload(file.readAll());
request.addOption(QCoapOption::UriPath, "resource");
client.put(request);

CoAP также предоставляет механизм публикации-подписки, который достигается с помощью запросов “observe” («наблюдения»):

QCoapReply *observeReply = client.observe(QUrl("127.0.0.1/temperature"));
connect(observeReply, &QCoapReply::notified, this, &CoapHandler::onNotified);

Теперь ваше приложение будет получать уведомления при каждом изменении ресурса “/temperature” («/температура»).

Что делает CoAP еще более интересным, так это возможность находить и открывать ресурсы CoAP. Вы можете найти ресурсы на данном хосте:

QCoapResourceDiscoveryReply
*discoverReply = client.discover(QUrl("127.0.0.1"));

Или во всей сети:

QCoapResourceDiscoveryReply
*discoverReply = client.discover();

Это отправит запрос на обнаружение многоадресной рассылки IPv4 CoAP multicast group. Вы также можете запустить обнаружение для узлов IPv6:

discoverReply = client.discover(QtCoap::MulticastGroup::AllCoapNodesIPv6LinkLocal);
// or
discoverReply = client.discover(QtCoap::MulticastGroup::AllCoapNodesIPv6SiteLocal);
...
connect(discoverReply, &QCoapResourceDiscoveryReply::discovered, this, &CoapHandler::onDiscovered);

Вы получите несколько ответов об обнаружении от каждого устройства CoAP в вашей сети. Например:

Host 1:

RES: 2.05 Content
;rt="temperature-c";if="sensor";obs,
;rt="firmware";sz=262144

Host 2:

RES: 2.05 Content
;rt="temperature-c";if="sensor";obs,

Это будет означать, что в вашей сети есть 2 устройства, на которых работают серверы CoAP: одно из них подключено к датчикам температуры и освещенности, а другое - только к датчику температуры.

Безопасность

Последнее, но не менее важное - это безопасность. Библиотека Qt CoAP поддерживает следующие режимы безопасности:

  • Аутентификация с помощью pre-shared keys (общих ключей).
  • Использование X.509 certificates (сертификатов X.509).

Для защиты соединения CoAP вам необходимо пройти один из этих режимов при создании клиента и настроить его соответствующим образом. Например:

QCoapClient secureClient(QtCoap::SecurityMode::PreSharedKey);
QCoapSecurityConfiguration config;
config.setIdentity("Client_identity");
config.setPreSharedKey("secretPSK");
secureClient.setSecurityConfiguration(config);
Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

Пікірлер

Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
Кіріңіз немесе Тіркеліңіз
m
  • molni99
  • Қаз. 26, 2024, 1:37 Т.Ж.

C++ - Тест 004. Указатели, Массивы и Циклы

  • Нәтиже:80ұпай,
  • Бағалау ұпайлары4
m
  • molni99
  • Қаз. 26, 2024, 1:29 Т.Ж.

C++ - Тест 004. Указатели, Массивы и Циклы

  • Нәтиже:20ұпай,
  • Бағалау ұпайлары-10

C++ - Тест 003. Условия и циклы

  • Нәтиже:42ұпай,
  • Бағалау ұпайлары-8
Соңғы пікірлер
i
innorwallҚар. 8, 2024, 8:51 Т.Ж.
Джанго - Сабақ 036. Әлеуметтік желілер арқылы аутентификацияны қалай қосуға болады. Байланыста buy priligy online usa In addition, it might not be effective at the doses recommended, because of your previous tolerance to a similar type of drug
i
innorwallҚар. 8, 2024, 7:40 Т.Ж.
Qt/C++ - 039-сабақ. QSqlTableModel жүйесінде жолды бағандағы мән бойынша бояу әдісі priligy results This slowing of eGFR decline was observed in patients with and without low eGFR and in those with and without type 2 diabetes
i
innorwallҚар. 8, 2024, 2:45 Т.Ж.
QML - Урок 002. QML Android жүйесіндегі пайдаланушы түймесі 2007; 14 2 270 83 priligy dapoxetine 60mg Testicular imaging is sort of a unique niche right now, Гў
i
innorwallҚар. 8, 2024, 1:32 Т.Ж.
C++ - #pragma бір рет құрастыруды жылдамдатады ма? It could cause harm to the unborn baby buy generic priligy
Енді форумда талқылаңыз
i
innorwallҚар. 8, 2024, 7:08 Т.Ж.
добавить qlineseries в функции School of Nursing, Long Island University, Brooklyn Campus, Brooklyn, NY, USA priligy dapoxetine 30mg
9
9AnonimҚаз. 25, 2024, 9:10 Т.Ж.
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
F
FynjyШілде 22, 2024, 4:15 Т.Ж.
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

Бізді әлеуметтік желілерде бақылаңыз