Управление однонаправленным каналомУправление однонаправленным каналом (Bearer Management) контролирует состояние подключения системы таким образом, что пользователь может запускать или останавливать интерфейсы или прозрачно переключаться между точками доступа. Краткий обзорAPI управления однонаправленным потоком (Bearer Management) контролирует состояние системного подключения. Это включает в себя такую информацию, как подключено ли устройство к сети и сколько имеется интерфейсов, а также позволяет разработчику приложения запускать, останавливать сетевые интерфейсы и воздействовать на другие специфичные детали соединения. В зависимости от возможностей платформы может быть обеспечено даже управление сессиями, так что сетевой интерфейс остаётся включённым до тех пор, пока отмечается интерес клиентов к нему, и в то же время оптимизируется время безотказной работы интерфейса. Сам по себе этот API не предоставляет поддержку управления сетевой конфигурацией. Предоставление инфраструктуры, которая даёт пользователю возможность создавать, редактировать или удалять сетевую конфигурацию, зависит от платформы. API в подробностяхКомпьютерные системы управляют сетевыми интерфейсами с помощью набора конфигураций. Каждая конфигурация описывает набор параметров, которые сообщают системе о том, как запущен отдельный сетевой интерфейс. Одним из самых простых примеров можно назвать конфигурацию Ethernet, которая привязывает сетевую карту к DHCP-серверу. Более сложный пример - конфигурация беспроводной сети, которая может состоять из аппаратных деталей, таких как адрес беспроводной сетевой карты, детали точки доступа беспроводной сети (например, имя сети - ESSID, детали шифрования) и пользовательские данные (например, имя пользователя и пароль). После настройки и запуска сетевого интерфейса согласно предварительного плана конфигурации, множество приложений могут свободно использовать это соединение/сессию канального уровня для своих операций с сокетом. Обратите внимание на то, что сам по себе объект QNetworkConfiguration предоставляет только ограниченную информацию о деталях конфигурации. Основная его цель - действовать в качестве идентификатора конфигурации, посредством которого могут быть созданы, уничтожены и проконтролированы соединения канального уровня. QNetworkSession обеспечивает два типа вариантов использования. Это даёт возможность контроля физических сетевых интерфейсов и управления сетевыми сессиями. Сетевые сессии являются обычным явлением на мобильных устройствах, когда несколько приложений могут запросить сетевые сессии как они считают нужным. Система объединяет и отслеживает активные сетевые сессии для одного и того же сетевого интерфейса, поддерживая соединения канального уровня пока последняя сессия не будет завершена. В последующей таблице перечислены основные функции QNetworkSession и как они вписываются в категории управления сессиями и аппаратурой: Состояние сессии отображает состояние основной точки доступа в то время как открытость сессии предполагает доступность сети/состояния соединения для текущего процесса. Возможные варианты использования интерфейса управления - управление сетью связанных приложений, которые намерены отслеживать состояние соединения, но сами не участвуют в сети связи. Как правило, любое приложение, желающее открыть сокет к удалённому адресу, будет использовать функциональность управления сессией. Сервисные сетиНекоторые мобильные платформы используют концепцию групповых точек доступа (также называется SNAP или точка доступа к сетевому сервису (Service Network Access Point)). В принципе несколько конфигураций группируются вместе и, возможно, даже располагаются в соответствии с приоритетом при сравнении друг с другом. Это полезно в случаях, когда все конфигурации служат одной цели или контексту. Общий контекст может заключаться в том, что они предоставляют доступ к сети интернет или, возможно, только к внутренней локальной сети офиса. Предоставляя пул конфигураций система может принять решение на основе заданных приоритетов, которым обычно соответствуют скорость, доступность и стоимость. Кроме того система может автоматически переключаться с одной точки доступа на другую, обеспечивая минимальное воздействие на работу пользователей. Флаг QNetworkConfiguration::Type указывает, к какой категории относится конфигурация. Тип QNetworkConfiguration::InternetAccessPoint является наиболее распространённым примером. Он представляет собой конфигурацию, которую можно использовать для создания сессии. Указанные выше группирующее поведение обеспечивается конфигурациями QNetworkConfiguration::ServiceNetwork. Сервисная сеть является владельцем пока пользователь пытается открыть новую сессию open(). В это время система определяет какую конфигурацию QNetworkConfiguration::children() лучше использовать. Алгоритм выбора предоставляется платформой и, как правило, им управляют с помощью сетевых настроек приложений. Сервисная сеть может иметь только один уровень скрытности, который подразумевает что тип потомков может быть только QNetworkConfiguration::InternetAccessPoint. Большинство систем позволяют пользователю определить системную конфигурацию по умолчанию. Обычное поведение по умолчанию заключается в том, что сервисная сеть, одиночная точка доступа в сеть интернет или сам пользователь приказывает платформе обратиться к пользователю при попытке приложения запросить сеть. Взаимодействие с пользователем, как правило, реализовано каким-нибудь системным диалогом, который появляется в соответствующий момент времени. Приложение не должно обрабатывать данные, введённые пользователем. Этот API предоставляет вызов QNetworkConfigurationManager::defaultConfiguration(), который служит тем же целям. В следующем фрагменте кода предоставлен быстрый способ создания приложением новой сетевой сессии без (или с минимальным) взаимодействием с пользователем: // Настройка точки доступа в интернет QNetworkConfigurationManager manager; const bool canStartIAP = (manager.capabilities() & QNetworkConfigurationManager::CanStartAndStopInterfaces); // Если имеется точка доступа по умолчанию, то используем её 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 поддерживает два типа роуминга. Роуминг прикладного уровня (Application level roaming, ALR) предоставляет наиболее общий контроль за процессом. Приложения уведомляются о предстоящих изменениях на канальном уровне и получают возможность протестировать новую точку доступа. В конце концов они могут отклонить или принять изменение на канальном уровне. Второй вид роуминга называется принудительным роумингом (Forced Roaming). Система просто вносит изменения на канальном уровне без уведомления приложения. Только от приложения зависит обнаружение того, что некоторые из его внутренних сокетов, возможно, перестали работать. Как следствие, оно переинициализирует эти сокеты и восстановит предыдущую пользовательскую сессию без каких-либо разъединений. Принудительный роуминг имеет то преимущество, что приложения не должны сами управлять процессом роуминга. QNetworkSession является основным классом управления вопросами, связанными с роумингом. Возможности платформыНекоторые возможности API доступны не на всех платформах. Для определения возможностей платформы во время выполнения нужно использовать QNetworkConfigurationManager::Capability. В следующей таблице приведены различные платформенные API, используемые данным API. Это может помочь в процессе определения поддержки возможностей:
|
Попытка перевода Qt документации. Если есть желание присоединиться, или если есть замечания или пожелания, то заходите на форум: Перевод Qt документации на русский язык... Люди внесшие вклад в перевод: Команда переводчиков |