Коммит 738b2df7 создал по автору lagutinakv's avatar lagutinakv Зафиксировано автором evseev84
Просмотр файлов

Add the section about network

владелец 43f5b5e3
Это отличие свёрнуто
# Проверка доступности сети
Copyright © 2016–2025 ООО «Открытая мобильная платформа».
Этот документ предоставляется в соответствии
с [Публичной лицензией Creative Commons с указанием авторства версии 4.0 Международная](../../LICENSE.CC-BY-4.0.ru.md).
## Доступность адреса
Разработчику приложений для ОС Аврора доступны несколько способов проверить сетевое соединение, используя методы API Qt Network. При этом для приложения должно быть указано разрешение Internet в desktop-файле.
Метод QNetworkConfigurationManager::isOnline() проверяет доступность заданного адреса.
Метод возвращает true, если указанный адрес доступен с мобильного устройства, в противном случае возвращает false.
## Соединение с хостом
Метод QNetworkAccessManager::connectToHost(const QString &hostName, quint16 port = 80) инициирует соединение с хостом, заданным именем hostName и портом port. Данный метод полезен для установки соединения по протоколу TCP с хостом до того, как будет выполнен HTTP-запрос, с целью уменьшения задержки сети.
Метод не имеет возможности сообщать об ошибках.
## Поиск хоста
Метод QHostInfo::lookupHost(const QString &name, QObject *receiver, const char *member) определяет IP-адреса, связанные с именем хоста name, и возвращает идентификатор ID для поиска. При завершении поиска слот или сигнал member объекта receiver вызывается с аргументом типа QHostInfo, который можно использовать для получения результата поиска.
Поиск выполняется одним вызовом функции.
Если устройство подключено к Аврора Центр, рекомендуется использовать адрес его сервера для проверки подключения.
В качестве значения параметра name можно передать IP-адрес. В этом случае метод QHostInfo будет искать доменное имя для IP (т.е. QHostInfo выполнит обратный поиск). В случае успеха результирующий QHostInfo будет содержать как разрешённое доменное имя, так и IP-адреса для имени хоста.
В случае запуска нескольких запросов с помощью lookupHost() порядок отправки сигналов может быть произвольным.
# Тесты по теме «Проверка доступности сети»
Copyright © 2016–2025 ООО «Открытая мобильная платформа».
Этот документ предоставляется в соответствии
с [Публичной лицензией Creative Commons с указанием авторства версии 4.0 Международная](../../LICENSE.CC-BY-4.0.ru.md).
## Matching
Сопоставьте методы и их функциональность.
---
| | |
|---------|--------------------------|
| isOnline | Доступность заданного адреса |
| connectToHost | Соедиение с хостом |
| lookupHost | Поиск хоста |
......@@ -395,8 +395,49 @@ Copyright © 2016–2025 ООО «Открытая мобильн
[конспект](./local_files/lecture.md)
* [Тесты](./local_files/tests.md)
* Мультимедиа
* HTTP
* WebSocket
* Работа с сетью
* [Протокол HTTP](./http)
* Лекция:
[cлайды](./http/lecture.fodp),
[конспект](./http/lecture.md)
* [Тесты](./http/tests.md)
* [XmlHttpRequest](./xmlhttprequest)
* Лекция:
[cлайды](./xmlhttprequest/lecture.fodp),
[конспект](./xmlhttprequest/lecture.md)
* [Примеры](./xmlhttprequest/examples.md)
* [Задания](./xmlhttprequest/tasks.md)
* [Тесты](./xmlhttprequest/tests.md)
* [Qt Network](./qt_network)
* Лекция:
[cлайды](./qt_network/lecture.fodp),
[конспект](./qt_network/lecture.md)
* [Тесты](./qt_network/tests.md)
* [Проверка доступности сети](./check_connection)
* Лекция:
[cлайды](./check_connection/lecture.fodp),
[конспект](./check_connection/lecture.md)
* [Тесты](./check_connection/tests.md)
* [Основы WebSocket](./websocket_base)
* Лекция:
[cлайды](./websocket_base/lecture.fodp),
[конспект](./websocket_base/lecture.md)
* [Тесты](./websocket_base/tests.md)
* [WebSocket Client](./websocket_client)
* Лекция:
[cлайды](./websocket_client/lecture.fodp),
[конспект](./websocket_client/lecture.md)
* [Тесты](./websocket_client/tests.md)
* [WebSocket Server](./websocket_server)
* Лекция:
[cлайды](./websocket_server/lecture.fodp),
[конспект](./websocket_server/lecture.md)
* [Тесты](./websocket_server/tests.md)
* [WebRTC](./webrtc)
* Лекция:
[cлайды](./webrtc/lecture.fodp),
[конспект](./webrtc/lecture.md)
* [Тесты](./webrtc/tests.md)
* Датчики
* Геолокация
* Базы данных
......
Это отличие свёрнуто
# Протокол HTTP
Copyright © 2016–2025 ООО «Открытая мобильная платформа».
Этот документ предоставляется в соответствии
с [Публичной лицензией Creative Commons с указанием авторства версии 4.0 Международная](../../LICENSE.CC-BY-4.0.ru.md).
## Обмен данными по сети
HTTP — это протокол для получения ресурсов.
Например, через него отправляются HTML-документы.
Он лежит в основе обмена данными в Интернете и является протоколом клиент-серверного взаимодействия.
Клиент и сервер взаимодействуют, обмениваясь сообщениями.
Сообщения, отправляемые клиентом, называются запросами, а сообщения от сервера называются ответами.
Клиент инициирует запросы к серверу.
Например, клиентом может быть веб-браузер.
Сервер отправляет ответ в виде документа.
Готовый документ состоит из различных ресурсов, таких как текстовое содержимое, описание структуры,
изображения, видео-файлы, скрипты и т.д.
## Процесс взаимодействия
Когда клиент хочет взаимодействовать с сервером, он выполняет следующие шаги:
1. Открытие TCP соединения: TCP-соединение будет использоваться для отправки запроса (или запросов) и получения ответа.
Клиент может открыть новое соединение, переиспользовать существующее или открыть несколько TCP-соединений к серверу.
2. Отправка HTTP-сообщения.
3. Чтение ответа от сервера.
4. Закрытие или переиспользование соединения для следующих запросов.
## Сообщения
Запросы содержат следующие элементы:
* HTTP-метод, например, GET или POST. Метод определяет операцию, которую клиент хочет выполнить. Самые распространённые операции — это получение ресурса (GET) или отправка HTML-формы (POST).
* Путь к ресурсу.
* Версия HTTP-протокола.
* Необязательные заголовки в формате ключ-значение, предоставляющие дополнительную информацию для сервера.
* Тело — для некоторых методов (таких как POST) содержит отправленный ресурс.
Ответы содержат следующие элементы:
* Версия HTTP-протокола.
* Код состояния, сообщающий об успешности запроса или причине неудачи.
* Сообщение состояния — краткое описание кода состояния.
* HTTP-заголовки, подобно заголовкам в запросах.
* Необязательно: тело, содержащее получаемый ресурс.
# Тесты по теме «Протокол HTTP»
Copyright © 2016–2025 ООО «Открытая мобильная платформа».
Этот документ предоставляется в соответствии
с [Публичной лицензией Creative Commons с указанием авторства версии 4.0 Международная](../../LICENSE.CC-BY-4.0.ru.md).
## Multiple choice
Что может содержать http-запрос?
---
* **HTTP-метод**
* **Версия HTTP-протокола**
* **Заголовки**
* **Тело**
* Код состояния
## Multiple choice
Что может содержать http-ответ?
---
* HTTP-метод
* **Версия HTTP-протокола**
* **Заголовки**
* **Тело**
* **Код состояния**
Это отличие свёрнуто
# Qt Network
Copyright © 2016–2025 ООО «Открытая мобильная платформа».
Этот документ предоставляется в соответствии
с [Публичной лицензией Creative Commons с указанием авторства версии 4.0 Международная](../../LICENSE.CC-BY-4.0.ru.md).
## Модуль Qt Network
ОС Аврора обеспечивает поддержку сетевого функционала устройств, в частности, подключения
к сети Интернет, Bluetooth и NFC.
С этими технологиями разработчики могут взаимодействовать как используя модули Qt, например
QtNetwork, QtWebSockets и Qt Bluetooth, так и через соответствующие интерфейсы D-Bus.
В данном модуле рассматриваются прикладные программные интерфейсы для работы с подключениями
по TCP/IP и веб-сокетами.
Qt5 содержит модуль QtNetwork с набором классов C ++ для работы с TCP/IP.
Чтобы работа с ним стала доступнаа, необходимо в pro файле приложения добавить модуль network,
а в spec файле добавить зависимость qt5-qtnetwork.
Данный модуль содержит классы для работы с сетью на разных уровнях.
Для работы непосредственно с TCP/IP и UDP используются классы QTcpSocket, QTcpServer и QUdpSocket.
Мы же поговорим о классах для работы на уровне http-запросов и ответов.
QNetworkAccessManager реализует механизм отправки запросов на сервер, QNetworkRequest cодержит общую
конфигурацию и настройки для посылаемых запросов, а QNetworkReply ответ сервера на наш запрос.
Разрешение для приложений, работающих с сетью:
Internet - Передача данных и подключение к Интернету.
## QNetworkAccessManager — менеджер запросов
Координация сетевых операций выполняется классом QNetworkAccessManager.
После того как запрос был создан, этот класс используется для отправки и испускания сигналов,
сообщающих о его прогрессе.
Менеджер также координирует использование файлов cookie для хранения данных на клиенте,
запросов аутентификации и использования прокси.
Класс содержит методы для отправки HTTP запросов GET и POST PUT.
На вход эти методы принимают объекты класса QNetworkRequest и возвращают новый объект
QNetworkReply, открытый для чтения.
Метод deleteResource реализует запрос на удаление ресурса HTTP DELETE.
С помощью метода setCacheможно задать класс, который реализует дополнительные функции работы
с сетевым кэшем.
Например, постоянное хранение куки.
Метод setProxy устанавливает прокси-сервер, который будет использован в последующих запросах.
## QNetworkRequest — сетевой запрос
Сетевые запросы представлены классом QNetworkRequest, который также выступает в качестве общего
контейнера для информации, связанной с запросом, например информация заголовка и используемое
шифрование.
URL, указанный при построении объекта запроса, определяет используемый протокол.
В настоящее время поддерживаются HTTP, FTP и локальные URL-адреса файлов для загрузки.
Методы QNetworkRequest позволяют сформировать данную информацию - установить Url запроса,
заголовок, причем как из списка известных типов, так и произвольного, который может быть специфичен
для определенных протоколов.
Метод setAttribute позволяет указать определенный атрибут запроса, который передан параметром code,
с помощью значения value, а setPriority устанавливает приоритет запроса.
Приоритет - это только рекомендация для QNetworkAccessManager, которая не обязательно будет
использована.
## QNetworkReply — ответ на запрос
QNetworkReply – класс, который содержит данные, метаданные и заголовки, связанные с ответом
на запрос, отправленный с помощью QNetworkAccessManager.
Сигналы, предоставляемые QNetworkReply, могут использоваться для индивидуального контроля каждого
ответа.
QNetworkReply является подклассом QIODevice, поэтому ответы могут обрабатываться синхронно
или асинхронно.
Ссылку на исходный запрос можно получить с помощью метода request.
Кроме этого можно получить URL-адрес загруженных данных, значение заголовка известного
или произвольного типа, аттрибут, связанный с ключом code, а также данные об ошибке, если она была
найдена во время выполнения запроса.
Основные сигналы QNetworkReply:
* readyRead() - отправляется, когда новые данные становятся доступны для чтения;
* error(QNetworkReply::NetworkError code) испускается, когда QNetworkReply обнаруживает ошибку при обработке;
* sslErrors(const QList& QSslError& errors) выдается, если в сеансе SSL / TLS обнаружены ошибки
во время настройки, включая ошибки проверки сертификата. Аргумент errors содержит список ошибок.
## Пример отправки запроса и получения ответа
Рассмотрим простой пример отправки GET запроса на адрес qt.io
Для этого создадим объект manager класса QNetworkAccessManager, а затем подготовим запрос, который
будем отправлять через него.
Запросу request установим url qt.io и заголовок user-agent для отправки информации серверу о том,
каким браузером мы пользуемся.
Указатель на возвращаемый ответ получим в результате выполнения метода get, и для него свяжем
сигналы ReadyRead, Error, SslErrors и соответствующие им слоты.
Сигнал readyRead будет отправлен, когда поступят данные.
Они будут обработаны методом onReadyRead, который описан ниже.
В случае ошибки при обработке запроса будут выброшены сигналы error или slotSslErrors,
которые нужно обработать.
В методе описанного нами класса onReadyRead сначала мы получаем объект reply, затем при отсуствии
ошибок прочитаем и выведем его содержимое в консоль.
# Тесты по теме «Qt Network»
Copyright © 2016–2025 ООО «Открытая мобильная платформа».
Этот документ предоставляется в соответствии
с [Публичной лицензией Creative Commons с указанием авторства версии 4.0 Международная](../../LICENSE.CC-BY-4.0.ru.md).
## Single choice
Есть ли возможность отправить запрос, используя только методы класса QNetworkRequest?
---
* Возможность существует, ограничений нет.
* **Нет, такой возможности нет совсем.**
* Возможна, но с определенными ограничениями по содержанию запроса.
## Single choice
Какие функции выполняет класс QNetworkReply?
---
* Позволяет приложению отправлять сетевые запросы.
* Позволяет приложению получать ответы на сетевые запросы.
* Содержит общую конфигурацию и настройки для посылаемых запросов.
* **Содержит ответ сервера на наш запрос.**
## Single choice
Чем отличаются методы setHeader и setRawHeader класса QNetworkRequest?
---
* **setHeader добавляет или изменяет заголовок типа QNetworkRequest::KnownHeaders header и его данные типа QVariant, а setRawHeader парсит название и значение заголовка из строк;**
* setRawHeader добавляет или изменяет заголовок типа QNetworkRequest::KnownHeaders header и его данные типа QVariant, а setHeader парсит название и значение заголовка из строк.
## Single choice
Что случится, если методу attribute класса QNetworkReply дать в качестве аргумента атрибут,
который для объекта не задан?
---
* Будет выброшено исключение.
* **Будет возвращен недействительный QVariant.**
## Single choice
Метод QNetworkReply::rawHeader(const QByteArray &headerName) возвращает исходное содержимое
заголовка headerName.
Как правильно обработать ситуацию, когда заголовок headerName оказывается не задан?
---
* поймать и обработать исключение;
* **перед вызовом rawHeader проверить, существует ли запрашиваемый заголовок при помощи метода hasRawHeader.**
## Multiple choice
Что можно сделать для получения данных от сервера, к которому мы подключились при помощи следующего кода:
```cpp
QNetworkAccessManager *manager = new QnetworkAccessManager();
QNetworkRequest request;
request.setUrl(QUrl("http://example.org"));
QNetworkReply *reply = manager->get(request);
```
---
* **подписаться на сигнал finished объекта reply и обработать полученные от сервера данные;**
* **подписаться на сигнал readyRead объекта reply и обрабатывать каждое новое поступление данных.**
* подписаться на сигнал finished объекта manager и обработать полученные от сервера данные;
* подписаться на сигнал readyRead объекта manager и обрабатывать каждое новое поступление данных.
## Multiple choice
Что содержит класс QNetworkReply?
---
* **Данные**
* **Метаданные**
* **Заголовки**
* Историю запросов.
## Single choice
Какие функции выполняет класс QNetworkRequest?
---
* Позволяет приложению отправлять сетевые запросы.
* Позволяет приложению получать ответы на сетевые запросы.
* **Содержит общую конфигурацию и настройки для посылаемых запросов.**
* Содержит ответ сервера на наш запрос.
## Single choice
Как получить объект запроса QNetworkRequest, результат которого содержится в QNetworkReply?
---
* Это можно сделать только из объекта QNetworkRequest.
* **Нужно вызвать метод request() объекта класса QNetworkReply.**
* Нужно вызвать метод attribute() на объекте QNetworkReply.
* Нужно вызвать метод get() на объекте QNetworkReply.
## Multiple choice
Какие классы используются для взаимодействия с сетевыми ресурсами?
---
* **QNetworkAccessManager**
* QNetworkRequestManager
* QNetworkReplyManager
* **QNetworkRequest**
* QNetworkAccess
* **QNetworkReply**
## Single choice
Какой сигнал отправит класс QNetworkReply, когда все данные будут загружены?
---
* readyRead
* **finished**
* completed
Это отличие свёрнуто
# WebRTC
Copyright © 2016–2025 ООО «Открытая мобильная платформа».
Этот документ предоставляется в соответствии
с [Публичной лицензией Creative Commons с указанием авторства версии 4.0 Международная](../../LICENSE.CC-BY-4.0.ru.md).
## Общение в реальном времени без плагинов
Библиотека WebRTC обеспечивает передачу аудио и видео данных (звонков) между браузерами. Стандарт WebRTC определяет набор ECMAScript API, позволяющих обмениваться медиа и произвольными данными с другим браузером или устройством, поддерживающим соответствующий набор протоколов реального времени.
Возможности WebRTC:
* Получение потокового аудио, видео или других данных.
* Получение информации о сети, такую ​​как IP-адреса и порты, и обмен ею с другими клиентами WebRTC (известными как одноранговые), чтобы разрешить соединение, даже через NAT и брандмауэры.
* Координация передачи сигналов для сообщения об ошибках и запуска или закрытия сеансов.
* Обмен информацией о мультимедиа и клиентских возможностях, таких как разрешение и кодеки.
* Общение с помощью потокового аудио, видео или данных.
## Архитектура WebRTC
WebRTC в том виде, в котором он реализован в настоящее время, поддерживает только обмен данными типа один-к-одному, но может использоваться в более сложных сетевых сценариях: например, с несколькими одноранговыми узлами, каждый из которых связывается друг с другом напрямую, одноранговым или через многоточечный блок управления (MCU).
RTCPeerConnection — это компонент WebRTC, который обеспечивает стабильную и эффективную передачу потоковых данных между узлами.
На слайде приведена диаграмма архитектуры WebRTC, показывающая роль RTCPeerConnection.
Кодеки и протоколы, используемые WebRTC, выполняют работу, чтобы сделать возможной связь в режиме реального времени, даже в ненадежных сетях.
## WebRTC в ОС Аврора
Для использования WebRTC в проекте её следует подключить по имени libwebrtc в конфигурационном файле, а также в spec-файле:
BuildRequires: pkgconfig(libwebrtc).
Далее библиотеку можно подключать в C++-код, указывая необходимые классы и их модули. Например:
#include "media/engine/webrtc_media_engine.h".
Для ОС Аврора доступен пример WebRTC.
Приложение на C++ демонстрирует аудио/видеовызовы WebRTC.
# Тесты по теме «WebRTC»
Copyright © 2016–2025 ООО «Открытая мобильная платформа».
Этот документ предоставляется в соответствии
с [Публичной лицензией Creative Commons с указанием авторства версии 4.0 Международная](../../LICENSE.CC-BY-4.0.ru.md).
## Single choice
Какие способы обмена данными поддерживает WebRTC?
---
* **один-к-одному**
* один-к-многим
Это отличие свёрнуто
# Основы WebSocket
Copyright © 2016–2025 ООО «Открытая мобильная платформа».
Этот документ предоставляется в соответствии
с [Публичной лицензией Creative Commons с указанием авторства версии 4.0 Международная](../../LICENSE.CC-BY-4.0.ru.md).
## Протокол WebSocket
WebSocket — это веб-протокол, предназначенный для обеспечения двусторонней связи между клиентским
приложением и удаленным хостом.
Он позволяет отправлять строковые и двоичные сообщения с использованием дуплексного канала связи.
Обычно веб-узел устанавливается путем подключения HTTP к серверу, а затем сервер «обновляет»
соединение с соединением WebSocket.
Это решение для приложений, которые пытаются получить потоки данных в реальном времени с меньшей
задержкой в сети и минимальным обменом данными.
Протокол использует схему URL-адреса «ws» или «wss» для безопасного соединения.
## Эхо-сервер WebSocket
WebSocket Echo Server (echo.websocket.org) — это бесплатная общедоступная конечная точка
тестирования для разработчиков, работающих с веб-технологиями реального времени.
Этот сервер обеспечивает мгновенные эхо-ответы для подключений WebSocket, событий Server-Sent (SSE)
и стандартных HTTP-запросов.
Эхо-сервер обеспечивает чистую и предсказуемую среду, где каждое отправленное сообщение немедленно
возвращается.
Эта простота делает сервер удобным для изоляции проблем с подключением, тестирования клиентских
библиотек, проверки конфигураций прокси-сервера и отладки проблем на уровне протокола.
Пользовательский интерфейс браузера: интерактивный интерфейс тестирования по адресу https://echo.websocket.org/.ws.
# Тесты по теме «Основы WebSocket»
Copyright © 2016–2025 ООО «Открытая мобильная платформа».
Этот документ предоставляется в соответствии
с [Публичной лицензией Creative Commons с указанием авторства версии 4.0 Международная](../../LICENSE.CC-BY-4.0.ru.md).
## Multiple choice
Какая схема URL-адреса используется для вебсокетов?
---
* **ws**
* **wss**
* http
* https
Это отличие свёрнуто
# WebSocket Client
Copyright © 2016–2025 ООО «Открытая мобильная платформа».
Этот документ предоставляется в соответствии
с [Публичной лицензией Creative Commons с указанием авторства версии 4.0 Международная](../../LICENSE.CC-BY-4.0.ru.md).
## Qt WebSockets
В Qt / QML вы можете просто использовать объекты WebSocket и WebSocketServer для создания
прямого соединения с websocket.
Работать с модулем Qt WebSockets QML можно после добавления зависимости в spec файле, после чего
в нужный qml документ импортируется модуль Qt.Websockets.
Для использования С++ классов модуля, в pro файле приложения добавляем модуль web-sockets
и прописываем зависимости в spec файле, после чего добавляем в нужный класс заголовочный файл
Qt Websockets.
Разрешения для приложений, работающих с сетью.
Internet - Передача данных и подключение к Интернету.
## Компоненты и классы Qt WebSocket
API для QML и C++ схожее.
WebSocket и WebSocketServer предназначены для работы с клиентом и сервером соответственно,
вспомогательные классы QMaskGenerator и QWebSocketCorsAuthenticator предназначены для того,
чтобы обеспечивать работу по стандарту WebSocket, например необходимо маскировать фреймы,
чтобы защитить сообщения от определенных уязвимостей.
### WebSocket — реализация сокета
Познакомимся с основными свойствами и методами компонента WebSocket:
* URL сервера для подключения;
* active указывает активен ли клиент;
* status отслеживает текущее состояние компонента;
* метод sendTextMessage() — отправить сообщение, сигнал textMessageReceived() уведомляет о получении сообщения;
* сообщение об ошибке содержится в свойстве errorString.
## Пример сокета
Посмотрим пример работы с сокетом в qml.
Объявим объект websocket, зададим url "echo.websocket.org" и сделаем его активным.
При получении сообщения от сервера мы его можем вывести, а также будем отслеживать состояние вебсокета.
# Тесты по теме «WebSocket Client»
Copyright © 2016–2025 ООО «Открытая мобильная платформа».
Этот документ предоставляется в соответствии
с [Публичной лицензией Creative Commons с указанием авторства версии 4.0 Международная](../../LICENSE.CC-BY-4.0.ru.md).
## Multiple choice
Какие состояния из следующего списка могут быть у qml-объекта WebSocket?
---
* **открыт**
* **закрыт**
* не подключён
## Multiple choice
Какие действия необходимо сделать при настройке проекта, только если требуется доступ к нативным классам вебсокетов?
---
* Импортировать библиотеку import QtWebSockets 1.0 в .QML-файл
* **Указать QT += websockets в .pro-файле**
* Указывать в spec: qt5-qtdeclarative-import-websockets
* **Указать qt5-qtwebsockets в Requires .spec-файла**
* **В .cpp-файле включить: #include <QtWebSockets/QtWebSockets>**
## Single choice
В каком случае необходимо импортировать зависимость qt5-qtdeclarative-import-websockets в .spec-файле?
---
* Только если требуется доступ к нативным классам вебсокетов
* **Только если вебсокеты используются в QML**
* Во всех случаях
* Не нужно производить этот импорт
## Single choice
Какое свойство должно быть обязательно заполнено в объекте WebSocket?
---
* id
* **url**
* active
Это отличие свёрнуто
Поддерживает Markdown
0% или .
You are about to add 0 people to the discussion. Proceed with caution.
Сначала завершите редактирование этого сообщения!
Пожалуйста, зарегистрируйтесь или чтобы прокомментировать