2013-01-22 27 views
1

我使用蓝牙的RFCOMM编写了Android应用程序。我通过相同的RFCOMM UUID向Android应用发送1 MB数据。RFCOMM接收数据时丢失了1个L2CAP数据包

我注意到1个L2CAP数据包数据在我的应用程序中遗漏了。有关更多详情,请参阅以下信息

我的Android手机蓝牙支持最大RFCOMM有效载荷是990个字节,因此,远程装置发送每个分组L2CAP用的990个字节的有效负载。每当我从远程设备发送1K数据时,它都被分成2个990和34字节的L2CAP数据包。

在我的Android应用接收到数据之后,我检查每个1K数据,有我注意到1 L2CAP数据包即,990个字节已在机器人跳过。

我使用分析仪检查了从远程设备发送的所有数据。它完全发送1 MB数据而不会失败。

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

我测试这个几次,990个字节的丢失的数据的每个I运行测试时间不在1MB的数据相同的索引。

我测试了采用Android 2.2,2.3.3和2.3.6版本的3个手机的每个移动facinf同样的问题

但同时接收来自RFCOMM套接字的InputStream的数据还我没有得到任何异常。

如果有人面临和解决我的问题,请帮助我。

+0

为了澄清,你是说,接收到的数据流中,你收到了连续字节?换句话说,您发送了“ A <990 bytes> B ”并且收到了“ AB ”? –

+0

@DavidSchwartz我正在那样做。这在1MB数据中是1次 –

+0

我可以想到很多可能的原因,并且几乎所有这些都是代码中的错误。试试这个实验 - 记录每个调用中接收到的低字节接收函数的字节数。看看它们是否总和你发送的字节数。如果是这样,并且990字节仍然丢失,那证明你的代码丢失了它们。 –

回答

0

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

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

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

感谢 马尼万南

+0

丢弃数据包不会导致数据丢失。 RFCOMM是一种[可靠的](http://en.wikipedia.org/wiki/Bluetooth_protocols#Radio_frequency_communication_.28RFCOMM.29)协议,即使在数据包丢失的情况下也不会破坏数据。 –

+0

@David:同意RFCOMM是可靠的。但我试图想象一种方式来确认yugendra的论点 –

0

您可能要派遣所有的数据后刷新流, 这可能是RFCOMM可以缓冲一些数据wiating其PDU填满。 请参阅本 - 数据,发送数据流中,有990个字节它们之间的数据的OutputStream::flush()

+0

我的远程设备是USB蓝牙适配器和蓝牙协议栈,通过在Windows中编写USB无线类驱动程序来开发。我使用USB分析器检查它是否将所有数据包发送到蓝牙无线电。 –

+0

发表一些代码或日志以供审查 –