Ответ 1
Просто объявите сервис, как tc. сказал ниже:
self.netService = [[[NSNetService alloc] initWithDomain:@""
type:@"_http._tcp"
name:@""
port:8080] autorelease];
[self.netService publish];
С iOS5, однако, let's-call-it "Bluetooth Bonjour" отключен по умолчанию, поэтому вам нужно использовать API C, объявленный в <dns_sd.h>
.
DNSServiceRef serviceRef;
DNSServiceRegister(&serviceRef, // sdRef
kDNSServiceFlagsIncludeP2P, // interfaceIndex
0, // flags
NULL, // name
"_http._tcp", // regtype
NULL, // domain
NULL, // host
1291, // port
0, // txtLen
NULL, // txtRecord
NULL, // callBack,
NULL // context
);
Это только часть объявления; разрешение немного сложнее. Я предлагаю вам взглянуть на следующие примеры от Apple:
- SRVResolver - демонстрирует, как вы можете искать службу с помощью API, объявленного в
<dns_sd.h>
. Задает OS X, но включает класс под названиемSRVResolver
, который можно использовать на iOS так же легко, как вы можете использовать его в OS X. Для работы iOS 5 Bluetooth P2P, обновите вызовDNSServiceQueryRecord()
, чтобы передатьkDNSServiceFlagsIncludeP2P
какinterfaceIndex
. ( ПРИМЕЧАНИЕ! Этот пример, похоже, не существует в OS X 10.8 docset. Он может быть найден в 10.6 и 10.7 документах. В 10.8 есть пример DNSSDObjects, но я не смотрел точно в том, что он делает.) - WiTap - пока вы действительно не заботитесь о поддержке Bluetooth на iOS 5, просто посмотрите на пример WiTap, который демонстрирует не только красивый API Objective-C, но и то, как вы можете создать сервер с помощью CFSocket API (тонкие обертки вокруг сокетов BSD). Вы захотите посмотреть на это, даже если вы используете SRVResolver, чтобы узнать, как использовать API на основе C от
<dns_sd.h>
.
После объявления или разрешения вашей службы вы используете обычные сокеты BSD для прослушивания или подключения. При написании сервера вам может понадобиться сначала listen()
на порту 0 (ноль), а затем запросить, какой случайный доступный порт был назначен вам. После запроса на это объявите этот порт вместо фиксированного. Это то, что делает пример WiTap (но с API CFSocket вместо API сокетов BSD).
Для получения дополнительной информации о сокетах BSD, просто Google для учебника.
Примечание: информация о iOS 5 поступает от Apple Технический Q & A QA1753.