Android 可以通过蓝牙支持 Zeroconf/Bonjour 吗? TCP/IP 怎么样?

Posted

技术标签:

【中文标题】Android 可以通过蓝牙支持 Zeroconf/Bonjour 吗? TCP/IP 怎么样?【英文标题】:Can Android support Zeroconf/Bonjour over Bluetooth? How about TCP/IP? 【发布时间】:2012-01-11 08:55:03 【问题描述】:

如果我创建自定义服务,例如“_test._tcp.local”,则在 iPhone 上。在 Bonjour 中,我可以通过 WiFi 或/和蓝牙搜索/广播此服务。

安卓可以吗?

我知道有 jmDNS,但据我了解,它只能通过 WiFi/网络工作, 不是蓝牙。

谢谢

由 Seva Alekseyev 编辑,他提供了赏金:我不追求变通办法(例如 Zeroconf sans Bluetooth 或 Bluetooth sans Zeroconf)。我追求的是真实的东西。

【问题讨论】:

我很想知道有关蓝牙的答案...是否允许 JmDNS 检测蓝牙暴露的 bonjour 服务?? 让我们从基础开始:有没有办法在 android 中通过蓝牙运行 TCP/IP?如果是这样,则可以在该特定接口上使用 JmDNS。也许只是曝光,而不是发现,反之亦然。 相关:TCP/IP over Bluetooth in Linux 相关:same question on Android StackExchange PAN 配置文件尚未发布用于 android。代码存在于项目中但被隐藏。 PAN 配置文件有 BluetoothPan 之类的类,但开发人员不能使用 【参考方案1】:

不在蓝牙上,因为 Android 目前不支持通过蓝牙的 TCP/IP,而 Android 的原生 NSD 支持 (network service discovery) 通过 IP 工作。

不过,它确实可以通过 Wi-Fi 工作。此外,Android 支持通过 Wi-Fi Direct 进行服务发现,这为您提供比蓝牙更大的范围和电池效率。有关如何将服务发现集成到支持 wi-fi direct 的应用程序的指南,请查看Android Training lesson。

此答案的部分内容从我们的Dear Android video response 复制到此问题

【讨论】:

【参考方案2】:

您可以使用BluetoothSocket 和BluetoothServerSocket 通过蓝牙创建类似 TCP 的套接字。

这是一个 android dnssd 示例: https://github.com/twitwi/AndroidDnssdDemo

您可能需要修改 jmdns 库,以便在蓝牙打开时创建蓝牙套接字,否则创建简单套接字。将套接字通信封装在一个有条件地创建套接字的不同类中。

【讨论】:

嗯,我最终追求的是 ios 到 Android,反之亦然服务发现。我认为这些不会互操作,因为 iOS 实现是基于 TCP/IP 的。 是的,这个概率很高,但是文档说它类似于 TCP 套接字.. 所以试试看.. 该示例没有声明蓝牙兼容性,也没有实现它。我在我的应用程序中集成了一段时间的 JmDNS;通过 WiFi 上的 TCP/IP,它可以与 iOS 正常通信。现在,仅仅因为接口相似,并不意味着 RFCOMM 套接字可以与 TCP/IP 套接字通信。这些是不同的交通工具。我对 BT 的了解还不够,不知道是否可以在 Android 堆栈之上从头开始重新实现 TCP/IP。 示例 rfcomm 实现...people.csail.mit.edu/albert/bluez-intro/x502.html 您可以直接与蓝牙微控制器对话并与它进行 HCI 对话,这可以让您做任何事情,但这只有在您是 root 的情况下才有可能。内核对所有这些的公共 API 都是基于套接字的。不幸的是,蓝牙中的原始套接字不是很有用,为了做任何有趣的事情,您还必须与本地 SDP 服务器通信,该服务器使用该死的 dbus 而不是任何合理的协议。【参考方案3】:

目前无法做到这一点有几个原因。与您的问题最相关的一个问题是 - 正如您可能遇到的那样 - jmDNS 需要 TCP/IP 链接来发布或浏览服务(它需要绑定 IP 地址)。正如其他答案和 cmets 所述,您需要为此建立一个 PANU 链接,而 Android 目前不提供该链接。

它不起作用的其他原因是:

Apple 使用多种机制来确保 iOS 设备只会与其他 iOS 设备通信。因此,即使您让 Android 与 Bonjour-over-Bluetooth 通话,它也只能在 Android-to-Android 上工作。 MFi 计划中经过 Apple 认证的设备具有由 Apple 提供的特殊加密芯片。我不确定这是否也适用于 Bonjour-over-Bluetooth 连接,但我认为确实如此。

您可以改为考虑使用蓝牙 4 LE - 至少从 iOS 5 开始有一个 Apple API 提供从属配置文件,并在 iOS 6 中扩展为支持主配置文件。

【讨论】:

以上是关于Android 可以通过蓝牙支持 Zeroconf/Bonjour 吗? TCP/IP 怎么样?的主要内容,如果未能解决你的问题,请参考以下文章

lwIP是否支持Zeroconf?

检测 MDNS/Zeroconf 设备适用于 Android 5.1.1,但不适用于 Android 7

Android 蓝牙开发(一)

Android/iOS 点对点架构 [关闭]

android adb 支持蓝牙连接吗

如何使用Android蓝牙开发