Spec-Zone.ru › Qt 5.14

Управление несущими

Управление несущими контролирует состояние подключения системы, чтобы пользователь мог начать или остановить интерфейсы или беспрепятственно переходить между точками доступа.

Обзор

API управления несущими контролирует состояние подключения системы. Это включает в себя простую информацию, такую как то, подключено ли устройство и сколько интерфейсов существует, а также позволяет разработчику приложения запускать, останавливать сетевые интерфейсы и влиять на другие детали, связанные с подключением. В зависимости от возможностей платформы она может даже предоставлять управление сессиями, чтобы сетевой интерфейс оставался активным до тех пор, пока клиенты заинтересованы в нем, и одновременно оптимизировать время активности интерфейса.

Этот API не предоставляет поддержки управления самими сетевыми конфигурациями. Платформа должна предоставить инфраструктуру, которая позволяет пользователю создавать, редактировать или удалять сетевые конфигурации.

Подробное описание API

Компьютерные системы управляют своими сетевыми интерфейсами с помощью набора конфигураций. Каждая конфигурация описывает набор параметров, которые инструктируют систему о том, как запустить конкретный сетевой интерфейс. Одним из самых простых примеров может быть конфигурация Ethernet, которая связывает сетевую карту с сервером DHCP. Более сложным примером может быть конфигурация беспроводной локальной сети (WLAN), которая может включать в себя такие данные о оборудовании, как адрес карты WLAN, данные о точке доступа WLAN (например, ESSID, данные шифрования) и пользовательскую информацию (например, имя пользователя и пароль). После того, как сетевой интерфейс был настроен и запущен в соответствии с проектом конфигурации, несколько приложений могут свободно использовать это подключение/сессию канального уровня для своих операций сокетов. Обратите внимание, что объект QNetworkConfiguration предоставляет только ограниченную информацию о самих деталях конфигурации. Его основная цель — действовать как идентификатор конфигурации, с помощью которого можно создавать, разрушать и контролировать подключения канального уровня.

QNetworkSession предоставляет два типа вариантов использования. Он позволяет отслеживать физические сетевые интерфейсы и управлять сетевыми сессиями. Сетевые сессии являются распространенной функцией на мобильных устройствах, где несколько приложений могут запрашивать сетевые сессии по своему усмотрению. Система объединяет и отслеживает активные сетевые сессии для одного сетевого интерфейса, сохраняя подключения канального уровня до тех пор, пока не будет закрыта последняя сессия. В следующей таблице перечислены основные функции QNetworkSession и то, как они соответствуют категориям управления сессиями и оборудованием:

Управление интерфейсом Управление сессиями
QNetworkSession::stop() QNetworkSession::open()
QNetworkSession::interface() QNetworkSession::close()
QNetworkSession::state() QNetworkSession::isOpen()
QNetworkSession::bytesWritten() QNetworkSession::migrate()
QNetworkSession::bytesReceived() QNetworkSession::ignore()
QNetworkSession::activeTime() QNetworkSession::accept()
QNetworkSession::stateChanged() QNetworkSession::reject()
QNetworkSession::opened()
QNetworkSession::closed()

Состояние сессии отражает состояние базовой точки доступа, а открытость сессии подразумевает доступное сетевое/соединение состояние для текущего процесса.

Возможные варианты использования для управления интерфейсом — это приложения, связанные с управлением сетью, которые намереваются отслеживать состояние подключения, но сами не участвуют в сетевом обмене. Любое приложение, желающее открыть сокет для удаленного адреса, обычно использует функциональность, связанную с управлением сессиями.

Сетевые службы

Некоторые мобильные платформы используют понятие сгруппированных точек доступа (также называемых SNAP или точками доступа к сетевым службам). По сути, несколько конфигураций группируются вместе и, возможно, даже имеют приоритет друг над другом. Это полезно для случаев использования, когда все конфигурации служат схожей цели или контексту. Общим контекстом может быть предоставление доступа к общедоступному Интернету или, возможно, только к корпоративной интрасети. Предоставляя пул конфигураций, система может принимать решение на основе заданных приоритетов, которые обычно соответствуют таким факторам, как скорость, доступность и стоимость. Кроме того, система может автоматически переключаться с одной точки доступа на другую, обеспечивая минимальное влияние на пользовательский опыт.

Флаг QNetworkConfiguration::Type указывает, к какой категории принадлежит конфигурация. Тип QNetworkConfiguration::InternetAccessPoint является наиболее распространенным примером. Он представляет конфигурацию, которую можно использовать для создания сессии. Упомянутое выше поведение группировки обеспечивается конфигурациями QNetworkConfiguration::ServiceNetwork. Сетевые службы — это заглушки до тех пор, пока пользователь не попытается open() новую сессию. В этот момент система определяет, какую из конфигураций QNetworkConfiguration::children() лучше использовать. Алгоритм выбора предоставляется платформой и обычно управляется приложениями настроек сети. У сетевой службы может быть только один уровень косвенности, что означает, что дочерние элементы могут быть только типа QNetworkConfiguration::InternetAccessPoint.

Большинство систем позволяют пользователю определять системную конфигурацию по умолчанию. Обычно по умолчанию является либо сетевая служба, определенная точка доступа к Интернету, либо пользователь инструктирует платформу запросить пользователя, как только приложение запросит сеть. Взаимодействие с пользователем обычно реализуется с помощью некоторого рода системного диалогового окна, которое появляется в соответствующий момент времени. Приложение не должно обрабатывать пользовательский ввод. Этот API предоставляет вызов QNetworkConfigurationManager::defaultConfiguration(), который служит аналогичной цели. Следующий фрагмент кода предоставляет быстрый способ, которым приложение может быстро создать новую сетевую сессию без (или с минимальным) взаимодействия с пользователем:

// Set Internet Access Point
QNetworkConfigurationManager manager;
const bool canStartIAP = (manager.capabilities()
                          & QNetworkConfigurationManager::CanStartAndStopInterfaces);
// Is there default access point, use it
QNetworkConfiguration cfg = manager.defaultConfiguration();
if (!cfg.isValid() || (!canStartIAP && cfg.state() != QNetworkConfiguration::Active)) {
    QMessageBox::information(this, tr("Network"), tr(
                                 "No Access Point found."));
    return;
}

session = new QNetworkSession(cfg, this);
session->open();
session->waitForOpened(-1);

Для поддержки варианта использования «Запросить у пользователя» конфигурация по умолчанию может быть типа QNetworkConfiguration::UserChoice. Конфигурация выбора пользователя разрешается в рамках вызова QNetworkSession::open(). Обратите внимание, что конфигурация UserChoice возвращается только через QNetworkConfigurationManager::defaultConfiguration(), а не через QNetworkConfigurationManager::allConfigurations().

В системах, которые не поддерживают список defaultConfiguration(), возвращается недействительная конфигурация. Возможным решением может быть реализация пользовательского диалогового окна, которое заполняется на основе того, что возвращает QNetworkConfigurationManager::allConfigurations().

Управление сетевыми сессиями

Объект QNetworkSession разделяет условие state() и isOpen().

Атрибут state() позволяет разработчикам определять, поддерживает ли система в настоящее время глобальную сетевую сессию для заданной QNetworkConfiguration. Если isOpen() возвращает true , то текущая экземпляр QNetworkSession был хотя бы одним из субъектов, запрашивающих глобальную сетевую сессию. Это различие необходимо для поддержки понятия регистрации сессий. Пока существуют один или несколько открытых экземпляров QNetworkSession, базовый сетевой интерфейс не закрывается. Следовательно, state() сессии можно использовать для отслеживания состояния сетевых интерфейсов.

Открытая сессия создается путем вызова QNetworkSession::open() и закрывается с помощью QNetworkSession::close() соответственно. Если сессия отключена во время вызова open(), базовый интерфейс запускается; в противном случае увеличивается только счетчик ссылок на глобальную сессию. Аналогичное поведение можно наблюдать при использовании close().

В некоторых случаях может потребоваться выключить интерфейс несмотря на открытые сессии. Это можно сделать, вызвав stop(). Примером может служить приложение типа сетевого менеджера, которое позволяет пользователю управлять общим состоянием подключения устройства.

Глобальная (межпроцессная) поддержка сессий зависит от платформы и может быть обнаружена с помощью QNetworkConfigurationManager::SystemSessionSupport. Если система не поддерживает глобальные сессии, вызов close() никогда не останавливает интерфейс.

Перемещение

Перемещение — это процесс повторного подключения устройства от одной сети к другой с минимальным влиянием на приложение. Система уведомляет приложение об изменениях канального уровня, чтобы можно было провести необходимые подготовительные мероприятия. Наиболее распространённой реакцией будет повторная инициализация сокетов и переустановление состояний подключений с другими сторонами. В самых крайних случаях приложения могут даже предотвратить перемещение.

Перемещение инициируется, когда система определяет, что для пользователя становится доступной более подходящая точка доступа. Как правило, такое решение основано на стоимости, скорости сети или типе сети (доступ к определённым частным сетям может быть предоставлен только через определённые точки доступа). Практически все устройства, поддерживающие перемещение, имеют какое-то глобальное приложение конфигурации, которое позволяет пользователю определять такие группы точек доступа (сетевые службы) и приоритеты.

Этот API поддерживает два типа роуминга. Роуминг на уровне приложения (ALR) обеспечивает наибольший контроль над процессом. Приложения будут уведомлены о предстоящих изменениях на уровне канала связи и получат возможность проверить новую точку доступа. В конечном итоге они могут отклонить или принять изменение канала связи. Второй тип роуминга называется принудительным роумингом. Система просто изменяет канал связи, не консультируясь с приложением. Приложение должно обнаружить, что некоторые его внутренние сокеты могут стать недопустимыми. Вследствие этого, оно должно повторно инициализировать эти сокеты и восстановить предыдущую пользовательскую сессию без каких-либо прерываний. Принудительный роуминг имеет преимущество, заключающееся в том, что приложениям не нужно самостоятельно управлять всем процессом роуминга.

QNetworkSession — это центральный класс для управления проблемами, связанными с роумингом.

Возможности платформы

Некоторые функции API недоступны на всех платформах. Для определения возможностей платформы во время выполнения следует использовать QNetworkConfigurationManager::Capability.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.14/bearer-management.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API