3

私は先週かそこらの間、これに頭を悩ませてきました。私はすでに次のリソースを調べました。

  • StackOverflow: Gamekit なしで Bluetooth 経由の Bonjour ? (3844189)
  • StackOverflow: Bonjour Over Bluetooth の仕組み (3350094)
  • StackOverflow: iOS GameKit の「Bluetooth Bonjour」を他のプラットフォームで使用する (8070998)
  • テクニカル Q&A QA1753 -- Apple Developer
  • WiTap サンプル アプリケーション
  • SRVResolver サンプル アプリケーション
  • DNSSDObjects サンプル アプリケーション

私は Mac OS 10.7、Xcode 4.5、iOS 6 を搭載した iPhone 4、iOS 5.1.1 を搭載した iPad 1 を使用しています。

私の問題は次のとおりです。現在、GameKit のピア ピッカーを使用して iPad と iP{hone|od touch} を接続するアプリケーションを変更しています。接続が失われた場合に Gamekit を使用してデバイスを再接続する際に問題が発生したため、代わりに Bluetooth 経由で Bonjour を使用するようにこれを変更したいと考えています。私は dns_sd.h API を使用して成功し、wifi 経由でアドバタイズして解決するサービスを取得しましたが、kDNSServiceFlagsIncludeP2P を渡しているにもかかわらず、Bluetooth 経由で成功していません。

おそらくBluetooth Bonjourにはデバイス間でPANが確立されている必要があると思いましたが、iPadをiMacにペアリングしてDNS-SDサービスをブラウズしても何も得られません...とにかくiPhoneはiPadにペアリングしません.

4

2 に答える 2

3

過去 24 時間以内に自分のアプリでこれを解決し終えたところです。OS X サンプル アプリ DNSSDObjects のコア クラスを使用しました。Bluetooth のサポートを追加するには、3 行のコードを変更するだけで済みました。これは、私の iOS アプリでうまく機能します。

DNSSDBrowser.m では、 2 番目のパラメータとしてkDNSServiceFlagsIncludeP2PDNSServiceBrowseを渡す必要があります。

DNSSDRegister.m では、呼び出しにDNSServiceRegister同じ変更が必要です。

DNSSDService.m では、 への呼び出しにDNSServiceResolveも同じ変更が必要です。

WiFi ではなく bluetooth のみに制限したい場合は、同じ 3 行のコードを更新して、3 番目のパラメーターがkDNSServiceInterfaceIndexAnyではなくkDNSServiceInterfaceIndexP2Pになるようにします。

于 2012-10-19T21:38:15.657 に答える
0

実際、kDNSServiceInterfaceIndexP2P フラグは OSX では機能しないようです。

IOS でコードを実行すると、Bonjour が 2 つの IP アドレスを発行することに気付くでしょう。1 つはローカル WiFi ネットワーク用で、169.xx.xx.xx アドレスは Bluetooth 用です。

OSX の同じコードは 169.xx.xx.xx アドレスを公開しないため、WiFi 経由でのみ検出されます。

于 2013-12-08T08:41:29.037 に答える