【问题标题】:Bluetooth Android RFCOMM / SPP error handling suggestions蓝牙 Android RFCOMM/SPP 错误处理建议
【发布时间】:2013-01-08 01:01:51
【问题描述】:

我正在计划在 Android 设备和使用商业蓝牙模块的自定义传感器之间使用一种通信协议。我会使用 SPP 配置文件,据说“为用户提供简单可靠的数据流,类似于 TCP。”

我对蓝牙技术不是很熟悉,对设计这样的协议有一些疑问。

首先,我不清楚我是否需​​要担心损坏的数据是否被传输。底层协议栈能否保证我从InputStream Android 读取的字节与 UART 在传感器端接收的字节相同?我是否必须定义自己的受 CRC 或其他东西保护的数据包,还是会有点矫枉过正?

从 Android 蓝牙文档中我不清楚如果信号微弱并且丢失了一段时间,我的应用程序会发生什么。我是立即收到IOException 还是平台为我提供了一些隐藏的错误处理和恢复,使我看不到如此短暂的中断?

感谢您的建议。

【问题讨论】:

    标签: android bluetooth rfcomm spp


    【解决方案1】:

    您不必担心 SPP 上的数据损坏,蓝牙提供 2 级 CRC,一个在基带,一个在 L2CAP 级别, 两者都具有针对任何检测到的损坏的重传机制 - 因此应用程序只会收到好的数据包。

    关于第二个问题 - 是的,在您连接的 Socket 流上,如果底层蓝牙连接断开,您将收到 IOExceptions,Android 无法处理自动恢复 - 通常应用程序需要检测断开连接的原因并尝试重新连接视情况而定。 因此,如果您想从上次成功接收/发送的那一点继续进行数据交换,那么您的应用程序应该维护某种序列号和轻协议以实现恢复。 另一种选择是在重新连接时简单地从数据交换的基础开始(所以这取决于您的用例)

    【讨论】:

    • 非常感谢,这个答案很清楚,涵盖了我想知道的所有内容。
    猜你喜欢
    • 2011-07-31
    • 2017-12-14
    • 2011-12-13
    • 2014-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-25
    相关资源
    最近更新 更多