【发布时间】:2013-01-22 06:43:00
【问题描述】:
我使用蓝牙的 RFCOMM 编写了 android 应用程序。我通过相同的 RFCOMM UUID 向 android 应用程序发送 1 MB 数据。
我注意到我的应用程序中丢失了 1 个 L2CAP 数据包数据。有关详细信息,请参阅以下信息。
我的 android 移动蓝牙支持最大 RFCOMM 有效负载为 990 字节,因此远程设备正在发送每个有效负载为 990 字节的 L2CAP 数据包。每当我从远程设备发送 1K 的数据时,它都会被分成 2 个 990 和 34 字节的 L2CAP 数据包。
在我的 android 应用程序中接收数据后,我检查了每个 1K 数据,我注意到 1 个 L2CAP 数据包,即 android 中跳过了 990 个字节。
我使用分析仪检查了从远程设备发送的所有数据。它完美地发送了 1 MB 数据,没有任何失败。
但仅在我的 android 应用程序中,我无法接收。这不是我的应用程序的问题,因为我在这里使用了蓝牙聊天示例代码。
这个我测试了好几次,每次运行测试的1MB数据中丢失的990字节数据并不是同一个索引。
我用 3 部 android 2.2、2.3.3 和 2.3.6 版本的手机对此进行了测试,每部手机都面临同样的问题
但我在从 RFCOMM 套接字的 InputStream 接收数据时也没有遇到任何异常。
如果有人遇到并解决了我的问题,请帮助我。
【问题讨论】:
-
澄清一下,您是说在接收到的数据流中,您收到了连续字节的数据,而在发送流中,它们之间有 990 个字节的数据?换句话说,您发送了“
AB ”并收到了“ AB ”? -
@DavidSchwartz 正是我只是这样。 1MB 数据中的 1 次
-
我可以想到很多可能的原因,而且几乎所有这些都是您代码中的错误。试试这个实验——记录你每次调用低级接收函数时接收到的字节数。看看它们是否等于您发送的字节数。如果是这样,并且仍然缺少 990 个字节,则证明您的代码丢失了它们。
-
我做了同样的事情,还做了一些实验
-
当你这样做时,你对接收函数的所有调用中接收到的字节数的总和是多少?是发送的字节数吗?还是少了 990?