NSNetService
NSNetService
класс представляет сетевую службу, или одно Ваше приложение публикует или является клиентом. Этот класс и NSNetServiceBrowser
использование класса многоадресно передало DNS для передачи информации о сетевых службах к и из приложения. API NSNetService
обеспечивает удобный способ опубликовать услуги, предложенные Вашим приложением и разрешить адрес сокета для службы.
Типы служб Вы получаете доступ к использованию NSNetService
те же типы, что Вы получаете доступ к непосредственно использованию сокеты BSD. HTTP и FTP являются двумя услугами, обычно предоставляемыми системами. (Для списка общего обслуживания и портов, используемых теми службами, посмотрите файл /etc/services
.) Приложения могут также определить свои собственные службы для предоставления определенных данных клиентам.
Можно использовать NSNetService
класс или как издатель службы или как клиент службы. Если Ваше приложение публикует службу, Ваш код должен получить порт и подготовить сокет для передачи с клиентами. Как только Ваш сокет готов, Вы используете NSNetService
класс, чтобы уведомить клиенты, что Ваша служба готова. Если Ваше приложение является клиентом сетевой службы, можно или создать NSNetService
возразите непосредственно (если Вы знаете точный узел и информацию порта), или используйте NSNetServiceBrowser
возразите для просмотра для служб.
Для публикации службы инициализируйте Ваш NSNetService
объект с именем службы, доменом, вводит, и информация порта. Вся эта информация должна быть допустимой для сокета, создаваемого Вашим приложением. После того, как инициализированный, вызовите publish
метод для широковещательной передачи информации о службе к сети.
При соединении со службой используйте NSNetServiceBrowser
класс, чтобы определить местоположение службы на сеть и получить соответствие NSNetService
объект. Как только у Вас есть объект, вызовите resolveWithTimeout:
метод, чтобы проверить, что служба доступна и готова к Вашему приложению. Если это, addresses
свойство предоставляет информацию сокета, которую можно использовать для соединения со службой.
Методы NSNetService
действуйте асинхронно, таким образом, на Ваше приложение не влияет скорость сети. Вся информация о службе возвращается к Вашему приложению через NSNetService
делегат объекта. Необходимо обеспечить объект делегата реагировать на сообщения и обработать ошибки соответственно.
Оператор импорта
Swift
import Foundation
Objective C
@import Foundation;
Доступность
Доступный в OS X v10.2 и позже.
-
Возвращает получатель, инициализированный как сетевая служба данного типа, и устанавливает начальную информацию об узле.
Объявление
Параметры
domain
Домен для службы. Для разрешения в доменах по умолчанию передайте в пустой строке (
@""
). Для ограничения разрешения локальным доменом использовать@"local."
.При создании этого объекта разрешить службу, информацию которой приложение хранило ранее, необходимо установить это в домен, в котором была первоначально обнаружена служба.
Можно также использовать a
NSNetServiceBrowser
объект получить список возможных доменов, в которых можно обнаружить и разрешить службы.type
Тип сетевой службы.
type
должен содержать и текстовый слой службы и информацию о транспортном уровне. Гарантировать, что mDNS респондент ищет службы, в противоположность узлам, префикс и имя службы и имя транспортного уровня с символом подчеркивания (“_”). Например, для поиска службы HTTP на TCP Вы использовали бы строку типа»_http._tcp.
«. Обратите внимание на то, что символ точки в конце строки, указывающей, что доменное имя является абсолютным именем, требуется.name
Имя службы для разрешения.
Возвращаемое значение
Получатель, инициализированный как сетевая служба, называют
name
из типаtype
в доменеdomain
.Обсуждение
Этот метод является надлежащим инициализатором для использования для разрешения службы — чтобы опубликовать службу, использовать initWithDomain:type:name:port:.
Если Вы знаете значения для
domain
,type
, иname
из службы Вы хотите соединиться с, можно создатьNSNetService
объект с помощью этого инициализатора и вызоваresolveWithTimeout:
на результате.Вы не можете использовать этот инициализатор для публикации службы. Этот инициализатор передает недопустимый номер порта определяемому инициализатору, препятствующему тому, чтобы была зарегистрирована служба. Вызов
publish
наNSNetService
объект, инициализированный с этим методом, генерирует вызов Вашему делегатуnetService:didNotPublish:
метод сNSNetServicesBadArgumentError
ошибка.Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.2 и позже.
См. также
-
Инициализирует получатель для публикации сетевой службы типа
type
в местоположении разъема, указанномdomain
,name
, иport
.Объявление
Параметры
domain
Домен для службы. Для использования регистрационных доменов по умолчанию передайте в пустой строке (
@""
). Для ограничения регистрации локальным доменом использовать@"local."
.Можно также использовать a
NSNetServiceBrowser
объект получить список возможных доменов, в которых можно опубликовать службу.type
Тип сетевой службы.
type
должен содержать и текстовый слой службы и информацию о транспортном уровне. Гарантировать, что mDNS респондент ищет службы, в противоположность узлам, префикс и имя службы и имя транспортного уровня с символом подчеркивания (“_”). Например, для поиска службы HTTP на TCP Вы использовали бы строку типа»_http._tcp.
«. Обратите внимание на то, что символ точки в конце строки, указывающей, что доменное имя является абсолютным именем, требуется.name
Имя, которым служба идентифицируется для сети. Имя должно быть уникальным. Если Вы передаете пустую строку (
@""
), система автоматически распространяет Вашу службу с помощью имени компьютера в качестве имени службы.port
Порт, на котором публикуется служба.
Если Вы указываете
NSNetServiceListenForConnections
флаг, можно передать нуль (0
), когда служба автоматически выделяет произвольный (эфемерный) порт для Вашей службы. Когда делегатnetServiceDidPublish:
вызывается, можно определить фактический порт, выбранный путем вызова объекта службыBackward Compatibility Note
метод или доступ к соответствующему свойству.Если Ваше приложение прислушивается к соединениям самостоятельно, значению
port
должен быть номер порта, полученный Вашим приложением за службу.Обсуждение
Вы используете этот метод для создания службы, которую Вы хотите опубликовать в сети. Несмотря на то, что можно также использовать этот метод для создания службы, Вы хотите решить в сети, является обычно более надлежащим использовать
initWithDomain:type:name:
метод вместо этого.При публикации службы необходимо обеспечить допустимые параметры для распространения службы правильно. Если главный компьютер имеет доступ к многократным регистрационным доменам, необходимо создать отдельный
NSNetService
объекты для каждого домена. При попытке опубликовать в домене, для которого у Вас нет регистрационных полномочий, Ваш запрос может быть отклонен.Приемлемо использовать пустую строку для
domain
параметр при публикации или просмотре службы, но не полагается на это для разрешения.Этот метод является определяемым инициализатором.
Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.2 и позже.
См. также
-
Возвраты
NSData
объект, представляющий запись TXT, сформировался из данного словаря.Объявление
Objective C
+ (NSData *)dataFromTXTRecordDictionary:(NSDictionary *)
txtDictionary
Параметры
txtDictionary
Словарь, содержащий запись TXT.
Возвращаемое значение
NSData
объект, представляющий данные TXT, сформировался изtxtDictionary
. Приводит утверждение к сбою еслиtxtDictionary
не может быть представлен какNSData
объект.Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.4 и позже.
-
Возвращает словарь, представляющий запись TXT, данную как
NSData
объект.Объявление
Objective C
+ (NSDictionary *)dictionaryFromTXTRecordData:(NSData *)
txtData
Параметры
txtData
Объект данных, кодирующий запись TXT.
Возвращаемое значение
Представление словаря
txtData
. Ключи словаряNSString
объекты с помощью кодирования UTF8. Значения, связанные с ключами всего словаря,NSData
объекты, инкапсулирующие строки или данные.Приводит утверждение к сбою если
txtData
не может быть представлен какNSDictionary
объект.Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.4 и позже.
-
Массив только для чтения, содержащий
NSData
объекты, каждый из которых содержит адрес сокета для службы. (только для чтения)Объявление
Swift
var addresses: [AnyObject]? { get }
Objective C
@property(readonly, copy) NSArray *addresses
Обсуждение
Массив, содержащий
NSData
объекты, каждый из которых содержит адрес сокета для службы. КаждыйNSData
объект в возвращенном массиве содержит надлежащееsockaddr
структура, которую можно использовать для соединения с сокетом. Точный тип этой структуры зависит от службы, с которой Вы соединяетесь. Если никакие адреса не были разрешены для службы, возвращенный массив содержит нулевые элементы.Для единственной службы возможно решить больше чем к одному адресу или не решить к любым адресам. Если компьютер, публикующий службу, в настоящее время является размещением в разных сетях, служба могла бы решить к многократным адресам.
Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.2 и позже.
См. также
-
Строка, содержащая домен для этой службы. (только для чтения)
Обсуждение
Это может быть явным доменным именем, или оно может содержать универсальное локальное доменное имя,
@"local."
(отметьте запаздывающий период, указывающий абсолютное имя).Значение этого свойства установлено, когда объект сначала инициализируется, возражают ли Вашим кодом или браузером. Посмотрите
initWithDomain:type:name:
для получения дополнительной информации.Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.2 и позже.
-
Создает пару потоков ввода и вывода для получателя и возвращает булево значение, указывающее, были ли они получены успешно.
Объявление
Swift
func getInputStream(_
inputStream
: UnsafeMutablePointer<NSInputStream?>, outputStreamoutputStream
: UnsafeMutablePointer<NSOutputStream?>) -> BoolObjective C
- (BOOL)getInputStream:(out NSInputStream **)
inputStream
outputStream:(out NSOutputStream **)outputStream
Параметры
inputStream
По возврату, входному потоку для получателя. Передача
NULL
если Вам не нужен этот поток.outputStream
По возврату, потоку вывода для получателя. Передача
NULL
если Вам не нужен этот поток.Возвращаемое значение
YES
true
если потоки создаются успешно, иначеNO
false
.Обсуждение
После того, как этот метод вызывают, никакие обратные вызовы делегата не вызывает получатель.
Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.4 и позже.
-
Строка, содержащая имя этой службы. (только для чтения)
Обсуждение
Это значение установлено, когда объект сначала инициализируется, возражают ли Вашим кодом или браузером. Посмотрите
initWithDomain:type:name:
для получения дополнительной информации.Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.2 и позже.
-
Тип опубликованной службы. (только для чтения)
Обсуждение
Это значение установлено, когда объект сначала инициализируется, возражают ли Вашим кодом или браузером. Посмотрите
initWithDomain:type:name:
для получения дополнительной информации.Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.2 и позже.
-
Возвращает запись TXT для получателя.
Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.4 и позже.
-
Устанавливает рекорд TXT для получателя и возвращает булево значение, указывающее, была ли работа успешна.
Объявление
Swift
func setTXTRecordData(_
recordData
: NSData!) -> BoolObjective C
- (BOOL)setTXTRecordData:(NSData *)
recordData
Параметры
recordData
TXT записывают для получателя.
Возвращаемое значение
YES
true
еслиrecordData
успешно установлен как запись TXT, иначеNO
false
.Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.4 и позже.
См. также
-
protocolSpecificInformation - protocolSpecificInformation
(OS X v10.4)Протокол возвратов определенная информация для устаревших клиентов ZeroConf-стиля.
Оператор осуждения
Использовать
TXTRecordData
вместо этого.Объявление
Objective C
- (NSString *)protocolSpecificInformation
Возвращаемое значение
Любые специфичные для протокола данные связались со службой.
Обсуждение
Этот метод предоставлен для устаревшей поддержки клиентов ZeroConf-стиля старшего возраста, и его использованию обескураживают.
Оператор импорта
Objective C
@import Foundation;
Доступность
Доступный в OS X v10.2 и позже.
Осуждаемый в OS X v10.4.
См. также
-
Протокол наборов определенная информация для устаревших клиентов ZeroConf-стиля.
Оператор осуждения
Использовать
setTXTRecordData:
вместо этого.Объявление
Objective C
- (void)setProtocolSpecificInformation:(NSString *)
specificInformation
Параметры
specificInformation
Информация для протокола.
Обсуждение
Присоединяет специфичные для протокола данные к службе.
Этот метод предоставлен для устаревшей поддержки клиентов ZeroConf-стиля старшего возраста, и его использованию обескураживают.
Оператор импорта
Objective C
@import Foundation;
Доступность
Доступный в OS X v10.2 и позже.
Осуждаемый в OS X v10.4.
См. также
-
Делегат к получателю.
Объявление
Swift
unowned(unsafe) var delegate: NSNetServiceDelegate?
Objective C
@property(assign) id< NSNetServiceDelegate > delegate
Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.2 и позже.
-
Добавляет служба к указанному циклу выполнения.
Объявление
Параметры
aRunLoop
Цикл выполнения, к которому можно добавить получатель.
mode
Режим цикла выполнения, к которому можно добавить получатель. Возможные значения для
mode
обсуждены в разделе «Constants»NSRunLoop
.Обсуждение
Можно использовать этот метод в сочетании с
removeFromRunLoop:forMode:
передать службу различному циклу выполнения. Вы не должны пытаться выполнить службу на многократные циклы выполнения.Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.2 и позже.
См. также
-
Удаляет службу из данного выполненного цикла для данного режима.
Объявление
Параметры
aRunLoop
Цикл выполнения, из которого можно удалить получатель.
mode
Режим цикла выполнения, из которого можно удалить получатель. Возможные значения для
mode
обсуждены в разделе «Constants»NSRunLoop
.Обсуждение
Можно использовать этот метод в сочетании с
scheduleInRunLoop:forMode:
передать службу различному циклу выполнения. Несмотря на то, что возможно удалитьNSNetService
возразите полностью от любого цикла выполнения и затем делайте попытку действий с ним, это - ошибка сделать так.Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.2 и позже.
См. также
-
Попытки распространить получатель в сети.
Объявление
Swift
func publish()
Objective C
- (void)publish
Обсуждение
Этот метод сразу возвращается с успешностью или неуспешностью, обозначенной обратными вызовами делегату. Это эквивалентно вызову
publishWithOptions:
с опциями по умолчанию (0
).Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.2 и позже.
См. также
-
Попытки распространить получатель в сети, с данными опциями.
Объявление
Swift
func publishWithOptions(_
serviceOptions
: NSNetServiceOptions)Objective C
- (void)publishWithOptions:(NSNetServiceOptions)
serviceOptions
Параметры
serviceOptions
Опции для получателя. Поддерживаемые опции описаны в
NSNetServiceOptions
.Обсуждение
Этот метод сразу возвращается с успешностью или неуспешностью, обозначенной обратными вызовами делегату.
Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.5 и позже.
-
Запускает процесс решения для службы.
Оператор осуждения
Использовать
resolveWithTimeout:
вместо этого.Объявление
Objective C
- (void)resolve
Обсуждение
Попытки определить по крайней мере один адрес для службы. Этот метод сразу возвращается с успешностью или неуспешностью, обозначенной обратными вызовами делегату.
В Mac OS X v10.4, это вызовы метода
resolveWithTimeout:
со значением тайм-аута5
.Оператор импорта
Objective C
@import Foundation;
Доступность
Доступный в OS X v10.2 и позже.
Осуждаемый в OS X v10.4.
-
Запускает процесс решения конечной продолжительности для службы.
Объявление
Swift
func resolveWithTimeout(_
timeout
: NSTimeInterval)Objective C
- (void)resolveWithTimeout:(NSTimeInterval)
timeout
Параметры
timeout
Максимальное количество секунд для попытки решения. Значение 0,0 не указывает тайм-аута и процесса решения неопределенной продолжительности.
Обсуждение
В течение периода решения отправляет служба
netServiceDidResolveAddress:
делегату к каждому адресу это обнаруживает, что соответствует параметры службы. Как только тайм-аут поражен, служба отправляетnetServiceDidStop:
делегату. Если никакое решение адресов в течение периода тайм-аута, отправляет службаnetService:didNotResolve:
делегату.Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.4 и позже.
См. также
-
Порт, на котором служба прислушивается к соединениям. (только для чтения)
Обсуждение
Если объект был инициализирован путем вызова
initWithDomain:type:name:port:
(было ли Вашим кодом или объектом браузера), тогда значение установлено, когда был сначала инициализирован объект.Если объект был инициализирован путем вызова
initWithDomain:type:name:
, значение этого свойства не допустимо (-1
) пока служба не была успешно разрешена (когдаaddresses
не -nil
).Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.5 и позже.
-
Запускает контроль TXT-рекордных обновлений для получателя.
Объявление
Swift
func startMonitoring()
Objective C
- (void)startMonitoring
Обсуждение
Делегат должен реализовать
netService:didUpdateTXTRecordData:
, когда запись TXT для получателя обновляется, который вызывают.Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.4 и позже.
См. также
-
Останавливает в настоящее время рабочую попытку опубликовать или разрешить службу.
Объявление
Swift
func stop()
Objective C
- (void)stop
Обсуждение
Делегат получит
netServiceDidStop:
после того, как служба останавливается.Безопасно удалить все сильные ссылки к службе сразу после вызова
stop
.Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.2 и позже.
-
Останавливает контроль TXT-рекордных обновлений для получателя.
Объявление
Swift
func stopMonitoring()
Objective C
- (void)stopMonitoring
Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.4 и позже.
См. также
-
Строка, содержащая имя хоста DNS для этой службы. (только для чтения)
Объявление
Swift
var hostName: String? { get }
Objective C
@property(readonly, copy) NSString *hostName
Обсуждение
Это значение
nil
пока служба не была разрешена (когдаaddresses
не -nil
).Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.4 и позже.
Типы данных
-
Эти константы указывают опции для сетевой службы.
Объявление
Swift
struct NSNetServiceOptions : RawOptionSetType { init(_
rawValue
: UInt) init(rawValuerawValue
: UInt) static var NoAutoRename: NSNetServiceOptions { get } static var ListenForConnections: NSNetServiceOptions { get } }Objective C
enum { NSNetServiceNoAutoRename = 1 << 0 NSNetServiceListenForConnections = 1UL << 1 }; typedef NSUInteger NSNetServiceOptions;
Константы
-
NoAutoRename
NSNetServiceNoAutoRename
Указывает, что сетевая служба не должна переименовывать себя в случае коллизии имени.
Доступный в OS X v10.5 и позже.
-
ListenForConnections
NSNetServiceListenForConnections
Указывает, что слушатель TCP должен быть запущен и для IPv4 и для IPv6 на порту, указанном этой службой. Если порт прослушивания не может быть открыт, служебные вызовы его делегат
netService:didNotPublish:
метод для создания отчетов об ошибке.Слушатель поддерживает только соединения TCP. Если тип службы не заканчивается
_tcp
, публикация перестала работать сNSNetServicesBadArgumentError
.Каждый раз, когда клиент соединяется с сокетом слушания, служебные вызовы его делегат
netService:didAcceptConnectionWithInputStream:outputStream:
метод с паройNSStream
объекты.Доступный в OS X v10.9 и позже.
Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.5 и позже.
-
-
Если ошибка происходит, методы обработки ошибок делегата возвращают словарь со следующими ключами.
Объявление
Objective C
extern NSString *NSNetServicesErrorCode; extern NSString *NSNetServicesErrorDomain;
Константы
-
NSNetServicesErrorCode
NSNetServicesErrorCode
Этот ключ идентифицирует ошибку, произошедшую во время новой работы.
Доступный в OS X v10.2 и позже.
-
NSNetServicesErrorDomain
NSNetServicesErrorDomain
Этот ключ идентифицирует инициатора ошибки, которая является любой
NSNetService
возразите или сетевой уровень Маха. Для большинства ошибок Вам не должно быть нужно значение, предоставленное этим ключом.Доступный в OS X v10.2 и позже.
-
-
Эти константы идентифицируют ошибки, которые могут произойти при доступе к сетевым службам.
Объявление
Swift
enum NSNetServicesError : Int { case UnknownError case CollisionError case NotFoundError case ActivityInProgress case BadArgumentError case CancelledError case InvalidError case TimeoutError }
Objective C
typedef enum { NSNetServicesUnknownError = -72000, NSNetServicesCollisionError = -72001, NSNetServicesNotFoundError = -72002, NSNetServicesActivityInProgress = -72003, NSNetServicesBadArgumentError = -72004, NSNetServicesCancelledError = -72005, NSNetServicesInvalidError = -72006, NSNetServicesTimeoutError = -72007, } NSNetServicesError;
Константы
-
UnknownError
NSNetServicesUnknownError
Произошла неизвестная ошибка.
Доступный в OS X v10.2 и позже.
-
CollisionError
NSNetServicesCollisionError
Служба не могла быть опубликована, потому что уже используется имя. Имя могло использоваться локально или в другой системе.
Доступный в OS X v10.2 и позже.
-
NotFoundError
NSNetServicesNotFoundError
Служба не могла быть найдена в сети.
Доступный в OS X v10.2 и позже.
-
ActivityInProgress
NSNetServicesActivityInProgress
В это время сетевая служба не может обработать запрос. Никакая дополнительная информация о состоянии сети не известна.
Доступный в OS X v10.2 и позже.
-
BadArgumentError
NSNetServicesBadArgumentError
Недействительный аргумент использовался при создании
NSNetService
объект.Доступный в OS X v10.2 и позже.
-
CancelledError
NSNetServicesCancelledError
Клиент отменил действие.
Доступный в OS X v10.2 и позже.
-
InvalidError
NSNetServicesInvalidError
Сетевая служба была неправильно сконфигурирована.
Доступный в OS X v10.2 и позже.
-
TimeoutError
NSNetServicesTimeoutError
Сетевая служба испытала таймаут.
Доступный в OS X v10.4 и позже.
Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.2 и позже.
-