3

在过去一周左右的时间里,我一直在反对这个。我已经浏览了以下资源:

  • StackOverflow:在没有 Gamekit 的情况下通过蓝牙享受 Bonjour ?(3844189)
  • StackOverflow:Bonjour Over Bluetooth 是如何工作的 (3350094)
  • StackOverflow:在其他平台上使用 iOS GameKit 的“Bluetooth Bonjour” (8070998)
  • 技术问答 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} 之间进行连接。我们想修改它以通过蓝牙使用 Bonjour,因为如果连接丢失,我们在使用 Gamekit 重新连接设备时遇到了问题。我已经使用 dns_sd.h API 取得了一些成功,并且已经获得了通过 wifi 进行广告和解析的服务,但是即使我通过了 kDNSServiceFlagsIncludeP2P,我也没有通过蓝牙获得任何成功。

我认为蓝牙 Bonjour 可能已经需要在设备之间建立 PAN,但即使将 iPad 与 iMac 配对并浏览 DNS-SD 服务也没有给我任何帮助……而且 iPhone 无论如何也不会与 iPad 配对。

4

2 回答 2

3

在过去的 24 小时内,我刚刚在自己的应用程序中解决了这个问题。我使用了 OS X 示例应用程序 DNSSDObjects 中的核心类。我只需要更改三行代码即可添加对蓝牙的支持。这在我的 iOS 应用程序中效果很好。

在 DNSSDBrowser.m 中,调用DNSServiceBrowse需要为第二个参数传入kDNSServiceFlagsIncludeP2P

在 DNSSDRegister.m 中,调用DNSServiceRegister需要进行相同的更改。

在 DNSSDService.m 中,对 的调用DNSServiceResolve也需要进行相同的更改。

如果您想将自己限制为仅使用蓝牙而不是 WiFi,则应更新相同的三行代码,因此第三个参数是kDNSServiceInterfaceIndexP2P而不是kDNSServiceInterfaceIndexAny

于 2012-10-19T21:38:15.657 回答
0

实际上,看起来 kDNSServiceInterfaceIndexP2P 标志在 OSX 上不起作用。

如果您在 IOS 上运行代码,您会注意到 Bonjour 将发布两个 IP 地址:一个用于您的本地 WiFi 网络,一个用于蓝牙的 169.xx.xx.xx 地址。

OSX 上的相同代码从不发布 169.xx.xx.xx 地址,因此只能通过 WiFi 找到。

于 2013-12-08T08:41:29.037 回答