1

我使用蓝牙的 RFCOMM 编写了 android 应用程序。我通过相同的 RFCOMM UUID 向 android 应用程序发送 1 MB 数据。

我注意到我的应用程序中丢失了 1 个 L2CAP 数据包数据。有关详细信息,请参阅以下信息。

我的 android 移动蓝牙支持最大 RFCOMM 有效负载为 990 字节,因此远程设备正在发送每个有效负载为 990 字节的 L2CAP 数据包。每当我从远程设备发送 1K 的数据时,它都被分成 2 个 L2CAP 数据包,每个数据包 990 和 34 字节。

在我的 android 应用程序中接收到数据后,我检查了每个 1K 数据,我注意到 1 个 L2CAP 数据包,即 android 中跳过了 990 个字节。

我使用分析仪检查了从远程设备发送的所有数据。它完美地发送 1 MB 数据而没有任何失败。

但仅在我的 android 应用程序中,我无法接收。这不是我的应用程序的问题,因为我在这里使用了蓝牙聊天示例代码。

我对此进行了多次测试,每次运行测试时丢失的 990 字节数据在 1MB 数据中的索引不同。

我用 3 部 android 2.2、2.3.3 和 2.3.6 版本的手机对此进行了测试,每部手机都面临同样的问题

但是在从 RFCOMM 套接字的 InputStream 接收数据时,我也没有遇到任何异常。

如果有人遇到并解决了我的问题,请帮助我。

4

2 回答 2

0

您能否使用 HCIDump 工具检查两个设备之间传输/接收的 ACL 数据。如果数据与 HCI ACL 数据包/发送和接收匹配,则接收端的 L2CAP 正在丢弃一些数据包。

看看这个链接,看看 mtu 是否会导致这个问题。

http://people.csail.mit.edu/albert/bluez-intro/x559.html

谢谢马尼文南

于 2013-01-22T13:22:55.673 回答
0

您可能希望在发送完所有数据后刷新流,RFCOMM 可能会缓冲一些等待其 PDU 填充的数据。看到这个 - OutputStream::flush()

于 2013-01-23T18:17:37.243 回答