我使用蓝牙的RFCOMM编写了android应用程序。我通过相同的RFCOMM UUID将1MB数据发送到android应用程序。
我注意到我的应用程序中遗漏了1个L2CAP数据包数据。有关更多详细信息,请参阅以下信息。
我的android移动蓝牙支持的最大RFCOMM有效载荷是990字节,所以远程设备发送的每个L2CAP数据包的有效载荷都是990字节。每当我从远程设备发送1K的数据时,它就被分成两个L2CAP数据包,每个数据包990字节和34字节。
在我的安卓应用程序中收到数据后,我检查了每1000个数据,在那里我注意到1个L2CAP包,即990字节在安卓系统中被跳过了。
我使用分析器检查了从远程设备发送的所有数据。它完美地发送了1MB的数据,没有任何失败。
但仅在我的android应用程序中,我无法接收。这不是我的应用程序的问题,因为我在这里使用了蓝牙聊天示例代码。
我对此进行了多次测试,每次运行测试时,丢失的990字节数据与1MB数据中的索引不同。
我用android 2.2,2.3.3和2.3.6版本的3个手机进行了测试,每个手机都有同样的问题
但是在从RFCOMM套接字的InputStream接收数据时,我也没有得到任何异常。
如果有人面对并解决了我的问题,请帮助我。
发布于 2013-01-22 21:22:56
您是否可以使用HCIDump工具检查两台设备之间传输/接收的ACL数据。如果数据与HCI ACL数据包/sent匹配并已接收,则接收端的L2CAP正在丢弃某个数据包。
请查看此链接并查看mtu是否可能导致此问题。
http://people.csail.mit.edu/albert/bluez-intro/x559.html
谢谢Manivannan
发布于 2013-01-24 02:17:37
您可能想要在发送完所有数据后刷新流,RFCOMM可能会缓冲一些数据以供其PDU填满。查看此内容- OutputStream::flush()
https://stackoverflow.com/questions/14452977
复制相似问题