Обнаружение и распространение сетевых служб
OS X и iOS обеспечивают четыре APIs для обнаружения и распространения сетевых служб:
NSNetService
— Высокоуровневый Objective C API, подходящий для большинства разработчиков приложений.CFNetService
— Высокий уровень C API, подходящий для использования в Базовом коде Основы.Открытие Службы DNS — низкий уровень C API, подходящий для межплатформенного кода. Этот API также предлагает больше гибкости, чем высокоуровневый APIs.
Игровая платформа Набора — высокоуровневый Objective C API, предоставляющий поддержку одноранговой связи для игр, и локально (использующий Wi-Fi инфраструктуры и Bluetooth) и глобально по Интернету.
В дополнение к этому APIs iOS предлагает Мультиравноправную Платформу Связи, предоставляющую поддержку для обнаружения и связи с экземплярами Вашего приложения и связанных приложений на соседних устройствах с помощью Wi-Fi инфраструктуры, однорангового Wi-Fi и Bluetooth.
Как правило необходимо использовать Гэйма Кита только для связанных с игрой одноранговых сетей. Для других одноранговых сетей между устройствами на iOS рабочий iOS 7 и позже, необходимо рассмотреть использование Мультиравноправной платформы Связи.
Для совместимости с более старыми версиями iOS можно также записать собственный сетевой код и использование CFNetService
или NSNetService
распространять его доступность.
Добрый день обзор службы
Реклама службы Bonjour состоит из трех частей:
Имя службы — Это имя должно быть уникально для определенного экземпляра Вашей программы, работающей на определенном компьютере.
Тип службы — Это должно быть тем же для всех экземпляров Вашей программы и должно быть зарегистрировано в Комитете по цифровым адресам в интернете (IANA).
Домен — Если значение домена пусто, узел, выбирает надлежащие домены, в которых можно опубликовать или просмотреть.
Когда приложение просматривает для служб Bonjour, оно просит службы, соответствующие определенный тип в определенном домене, и оно возвращает список соответствия имен службы. Это должно тогда представить надлежащий UI пользователю. Когда пользователь говорит приложению соединяться с определенной службой, приложение должно тогда соединиться со службой с помощью подключения к службе API. (Если это не возможно по некоторым причинам, приложение может передать имя хоста службы и порт к подключению по имени API или, если подключение по имени, API не доступен, приложение, может попросить Добрый день разрешать имя хоста, и приложение может тогда соединиться IP-адресом и номером порта.)
Публикация сетевой службы
Добрый день сети нулевой конфигурации позволяют Вам распространить сетевые службы, такие как принтер или служба синхронизации документа, в сети. Существует три способа опубликовать сетевую службу:
Для Objective C и Базового кода Основы, рекомендуемый путь с
CFNetServices
API.Для переносимого кода C, который должен работать на операционных системах кроме iOS и OS X, Открытие C Службы DNS, которое рекомендуется API.
Можно опубликовать сетевую службу со следующими шагами:
Создайте сокет для прислушиваний к соединениям со службой. Посмотрите Запись Основанного на TCP Сервера в Сетях Тем Программирования для рекомендуемого способа прислушаться к соединениям на сетевом сокете.
Создайте объект службы, обеспечив порт Вашего сокета, домен (обычно пустая строка), и строка типа службы Вашего выбора:
С Основой инициализируйте
NSNetService
объект сinitWithDomain:type:name:port:
метод.С Базовой Основой создайте a
CFNetServiceRef
объект сCFNetServiceCreate
функция.С Открытием Службы DNS API вызвать
DNSServiceRegister
возвратить aDNSServiceRef
объект.
Присвойте делегата или обратный вызов:
С Основой присвойте делегата в
NSNetService
объект сdelegate
метод.С Базовой Основой присвойте клиентский обратный вызов
CFNetServiceRef
объект сCFNetServiceSetClient
функция.С Открытием Службы DNS API необходимо передать клиентский обратный вызов (и, дополнительно, указатель на объект контекста выбора) в вызове к
DNSServiceRegister
. В этой точке Вы сделаны за исключением обработки обратных вызовов, когда они происходят.
Запланируйте или перепланируйте службу, если необходимый:
С Основой служба автоматически планируется на текущий цикл выполнения в режиме по умолчанию. Если необходимо запланировать объект на другой цикл выполнения или в различном режиме, необходимо не запланировать его и перепланировать его в этой точке.
С Базовой Основой необходимо запланировать
CFNetServicesRef
объект на цикле выполнения путем вызоваCFNetServiceScheduleWithRunLoop
.С Открытием Службы DNS API вызвать
DNSServiceSetDispatchQueue
запланировать службу на очередь отгрузки. (Если необходимо поддерживать OS до OS X v10.7, см. проект примера кода SRVResolver для примера того, как использовать Открытие Службы DNS без Центральной Отгрузки.)
Опубликуйте службу, если необходимый:
С Основой опубликуйте службу путем вызова
publish
метод.С Базовой Основой опубликуйте службу путем вызова
CFNetServiceRegisterWithOptions
.С Открытием Службы DNS API никакие дальнейшие действия не необходимы; когда Вы вызвали, служба была уже опубликована
DNSServiceRegister
.
После того, как Ваша служба публикуется, можно прислушаться к соединениям на сокете и установить потоки ввода и вывода, когда сделано соединение.
Просмотр для и соединение с сетевой службой
Процесс для нахождения и разрешения сетевой службы так же прост как процесс для публикации той. Для просмотра для сетевых служб в Objective C создайте экземпляр NSNetServiceBrowser
класс и присваивает его делегат. Затем вызовите searchForServicesOfType:inDomain:
метод на браузере службы. netServiceBrowser:didFindService:moreComing:
метод делегата вызывают один раз для каждой найденной службы.
Для соединения со службой сначала остановите просмотр путем вызова stop
(если у Вас нет определенной причины продолжить просматривать), затем вызовите getInputStream:outputStream:
метод на NSNetService
объект, представляющий службу. Адрес службы разрешен автоматически.
Можно также использовать CFStreamCreatePairWithSocketToNetService
функция с a CFNetServiceRef
возразите для соединения со службой Bonjour.
Разрешение сетевой службы
Вы, возможно, должны разрешить сетевую службу вручную для обеспечения адреса службы для API, не принимающего имена сетевой службы. Для разрешения сетевой службы в Objective C сначала остановите просмотр путем вызова stop
(если у Вас нет определенной причины продолжить просматривать), затем вызовите resolveWithTimeout:
метод на NSNetService
объект, представляющий службу.
netServiceDidResolveAddress:
когда адрес службы был разрешен, метод вызывают на делегате службы. Можно тогда получить доступ к имени хоста службы с hostName
метод или его адресная информация с addresses
метод. Для предотвращения ненужного сетевого трафика необходимо также вызвать stop
на NSNetService
возразите, как только это возвращает ряд адресов.
Мультиравноправный обзор связи
Мультиравноправная Платформа Связи обеспечивает уровень поверх Добрый день, позволяющий Вам связаться с приложениями, работающими на соседних устройствах (по Wi-Fi инфраструктуры, одноранговому Wi-Fi и Bluetooth), не имея необходимость писать много сетевого кода, определенного для Вашего приложения.
С Мультиравноправной Связью Ваше приложение распространяет свою доступность. Это может тогда обнаружить другие экземпляры Вашего приложения (или другие приложения, совместно использующие тот же тип службы), работа соседних устройств, и может пригласить те соседние коллеги присоединяться к сеансу. Если они принимают приглашение, Ваше приложение может отправить сообщения и файлы к один или больше связанных коллег только с вызовом отдельного метода.
При необходимости в коммуникации на основе потоков приложение может открыть однонаправленный поток для любой связанной коллеги (который может также открыть однонаправленный поток назад для приложения в ответ).
Наконец, Мультиравноправная Связь предоставляет возможность для совместного использования мелких сумм данных (таких как псевдоним пользователя) вне контекста сеанса, при желании разрешающего Вам предоставлять пользователю информацию, которую он или она может использовать при выборе коллег для приглашения в сеанс.
Узнавать больше
Мультиравноправная Связь — Мультиравноправная Ссылка Платформы Связи Чтения и проект примера кода MultipeerGroupChat.
Игровой Набор — Игровое Руководство по программированию Центра Чтения, Ссылка Платформы GameKit, и GKRocket и проекты примера кода GKTank.
NSNetService
— Считайте Руководство по программированию NSNetServices и CFNetServices, Ссылку класса NSNetServiceBrowser, Ссылку на протокол NSNetServiceBrowserDelegate и Ссылку на протокол NSNetServiceDelegate. Для примера кода см. проект примера кода RemoteCurrency.
CFNetService
— Считайте ссылку руководства по программированию и CFNetServices NSNetServices и CFNetServices.
Открытие службы DNS — чтение руководство по программированию открытия службы DNS и ссылка открытия C службы DNS.