Добрый день через Bluetooth БЕЗ Gamekit?

Меня интересует возможность прямого использования bonjour через Bluetooth в iPhone OS 3.0 или более поздней версии без использования GameKit. Кто-нибудь может привести примеры?

3 ответа

Просто объявите сервис, так же, как tc. сказал ниже:

self.netService = [[[NSNetService alloc] initWithDomain:@"" 
                                                   type:@"_http._tcp" 
                                                   name:@"" 
                                                   port:8080] autorelease];
[self.netService publish];

В iOS5, однако, по-умолчанию Bluetooth Bonjour отключен, поэтому вы должны использовать C API, объявленный в <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. Он может быть найден в наборах документов 10.6 и 10.7. В 10.8 приведен пример DNSSDObjects, но я не совсем понял, что он делает.)
  • WiTap - пока вы на самом деле не заботитесь о поддержке Bluetooth в iOS 5, просто посмотрите на пример под названием WiTap, который демонстрирует не только красивый Objective-C API, но и то, как вы можете создать сервер, используя CFSocket API (тонкие обертки вокруг розеток BSD). Вы захотите взглянуть на это, даже если вы используете SRVResolver, чтобы увидеть, как использовать API на основе C из <dns_sd.h>,

После объявления или разрешения вашего сервиса вы используете обычные BSD-сокеты для прослушивания или подключения. При написании сервера вы можете даже захотеть сначала listen() на порту 0 (ноль), а затем запросите, какой случайный доступный порт был назначен вам. После запроса объявите этот порт вместо фиксированного. Это именно то, что делает пример WiTap (но с API CFSocket вместо API сокетов BSD).

Для получения дополнительной информации о сокетах BSD, просто Google вокруг для учебника.

Примечание: информация о iOS 5 взята из Технических вопросов и ответов Apple QA1753.

Прочитайте эту статью: Bonjour через Bluetooth на iOS 5.0 https://developer.apple.com/library/ios/

Это известная проблема в IOS 5.0, и ее необходимо решить с помощью API более низкого уровня: DNSSDObjects.

Если Bluetooth включен, на достаточно новом устройстве (3G и выше, или аналоге iPod, или iPad) и достаточно новой ОС (очевидно, 3.1), Bonjour автоматически будет работать через Bluetooth, используя локальные адреса связи (168.254.*), Тогда вы просто используете TCP/UDP как обычно.

(Я уверен, что GameKit использует Bonjour-over-IP-over-Bluetooth.)

В противном случае публикация / просмотр выполняется на уровне Bluetooth, но если один из них публикует службу Bonjour, а другой просматривает ее, устанавливается автоматическое соединение IP через Bluetooth.

Любые примеры Bonjour должны работать автоматически.

Другие вопросы по тегам