Android 蓝牙RFCOMM/L2CAP 阻塞问题 -- 文件传输失败
来源:互联网 发布:淘宝为什么没有比价了 编辑:程序博客网 时间:2024/05/17 21:46
最近遇到一个蓝牙传输问题的BUG。
BUG描述:测试机与辅助机发送文件,测试机显示传输100%,辅助机显示接收99%。
BUG结论:测试机最后没有收到辅助机发送的credit信息,导致测试机不能再发送data过去。需要辅助机侧查看问题问题原因。
借此机会,梳理了部分RFCOMM/L2CAP的阻塞逻辑,在此简单记录一下。
阻塞分两个地方 : RFCOMM 和 L2CAP
RFCOMM的阻塞由credit决定,RFCOMM建立之初,接收方会给发送方授权credit = 7。允许发送方发送7包,接收方每接收一个rfcomm数据包,就会将可接受的数据-1,当可接收的数据<=4的时候,接收方就会再次给发送方credit。由于最大可接收的credit设定为34,所以此时接收方将发送一个credit = 34 - 4 到发送方,发送便可继续发送rfcomm,不然就默认当前rfcomm拥塞。发送端一旦将授权的个数用完之后,就将处于拥塞状态,等待接受方的授权credit来了,此继续发送。
L2CAP的阻塞由自身决定。当RFCOMM建立的时候后,双方交互每一个put的最大值,一般情况为65334,每一包为1004,差不多就是64包的样子。每一次协议栈都从上层读取65334长度的数据,然后一股脑就发送到L2CAP。L2CAP在每个channel上接收到一包需要发送的数据之后,都会去判断quota是否已经过大,上限一般设置为34,所以一旦l2cap包缓存了35时,就会认为拥塞,不再接受rfcomm的数据,直到缓存数据只有最大值的一般,也就是17的时,结束拥塞,上层才可以继续下发数据包。
阅读全文
0 0
- Android 蓝牙RFCOMM/L2CAP 阻塞问题 -- 文件传输失败
- 关于蓝牙通信文档 Android建立蓝牙RFCOMM通信
- 蓝牙RFCOMM连接
- Android 2.0 蓝牙功能及RFCOMM、SDP简介
- android 蓝牙代码架构及其uart 到rfcomm流程
- android蓝牙文件传输的实现
- android 蓝牙 bluetooth OPP文件传输
- 蓝牙的L2CAP协议
- 蓝牙的L2CAP协议
- 蓝牙核心-L2CAP
- 蓝牙核心-L2CAP
- 蓝牙L2CAP【CID分配】【L2CAP层图解】
- 蓝牙RFCOMM剖析(一)
- 蓝牙L2CAP剖析(一)
- 蓝牙L2CAP剖析(二)
- 蓝牙L2CAP剖析(一)
- 蓝牙L2CAP剖析(二)
- android -- 蓝牙 bluetooth (四)OPP文件传输
- 软件更新后 version `GLIBCXX_3.4.15' not found
- Web应用安全之OS命令安全隐患
- 指针基础使用详解
- VS2013编写C++程序检测内存泄漏
- CF
- Android 蓝牙RFCOMM/L2CAP 阻塞问题 -- 文件传输失败
- ns安装出现的问题
- 剑指offer——把数组排成最小的数_____
- 第五次上机实验
- (四)项目结构介绍
- Reactor
- Java命名规范
- hdoj1010 Tempter of the Bone(迷宫问题dfs,奇偶剪枝)
- python数据挖掘包Sklearn