1. 引言
在全球通信网络技术快速发展的今天,平板电脑和智能手机等新型无线设备的出现已经逐渐取代了电脑、打印机、传真机和移动电话等设备传统的有线链接 [1] 。现在市场上已有的无线通信技术,比如像3G、4G、Bluetooth、HomeRF、UWB等无线通信链接技术,都有其各自的优势和应用定位 [2] 。爱立信公司在1998年提出了一种低成本、低功耗的无线链接技术——蓝牙(Bluetooth)技术。它也是短距离的无线通信技术,工作在2.4 GHz~2.485 GHz的ISM频段 [3] ,是基于数据包、有着f主从架构的协议,采用跳频技术,将要传输的数据分割成数据包,再进行传输,数据传输可以随时在主设备和其他设备之间进行。蓝牙技术也具有很强的可移植性,可以应用于很多通信场合 [4] 。比如像耳机、名片交换、无线拨号上网等。蓝牙可以构成固定设备和移动设备在通信信息传递中的资源共用 [5] 。它集成的电路也非常简单,容易实现,易于推广,方便应用于全球范围内的无线通信链接。
针对基于蓝牙的手机和计算机直接的通信,市场上产品很多,但大多是商家提供的基于硬件的产品 [6] ,比如车载电话、蓝牙耳机、蓝牙音箱等,用蓝牙实现手机和计算机文本信息和大文件的资料却很少。移动通信技术的发展越来越迅速,推动了信息时代的发展,在移动通讯技术中,蓝牙技术成为一项重要技术,蓝牙技术为移动技术的发展提供了广阔的前景,蓝牙技术在手机中的应用,能够实现手机在无线连接的方式下传输文件,实现了无线通信。
目前基于蓝牙的手机和计算机文本信息传输,尤其是大文件传输存在着严重的传输不稳定的问题,大文件传输主要采用直接调用Obex协议的方法,用这种方法传输大文件速率不高,效率也不稳定。论文致力于解决蓝牙传输大文件效率不稳定的问题,在分析复杂的蓝牙底层协议基础上,自行开发了相对应的通信程序。设计了蓝牙大文件重传机制,解决了蓝牙传输大文件效率不稳定问题。蓝牙的传输速率为1 Mb/s,传输大文件容易产生丢包现象,需要在传输过程中采取重传机制保证传输质量。
2. 蓝牙通信数据交换模块设计
OBEX为Object Exchange,用于在蓝牙设备间传数据对象,来源于红外定义的协议,后被蓝牙采用 [7] 。OBEX在蓝牙协议层中的位置如图1所示(在之前的OBEX版本中,OBEX是通过RFCOMM挂在L2CAP上的)。
2.1. 蓝牙Object Model
OBEX定义了Object model来进行数据的交换,形式为Request-Response。OBEX定义了Headers来描述数据,结构如下:
1byte
n byte
由HI和HV两部分组成。HI的最高两位表示这个Header的编码形式,低6位表示header的类型,HV表示数据实体。
高两位的编码如图2所示。

Figure 1. Position of OBEX in the bluetooth protocol layer
图1. OBEX在蓝牙协议层中的位置

Figure 2. Object model high two-bit encoding
图2. Object model高两位编码
0x00和0x40两种后面会跟上2字节的length(length prefixed),表示的是整个Header的长度,包括HI和HV [8] 。
低6位的定义类型如图3所示。
提一下End-Of-Body,用来表示数据传输的最后一个data chunk。
2.2. 蓝牙通信Request和Response
在OBEX的规定中,Client和Server通过request-response的形式来进行对话,交换的数据包含在这两种包中 [9] ,分别定义如下:

参数opcode表示该request的类型,length表示整个request的字节数,最后跟着的是第2节中定义的各种Headers
1) Opcode有如下几种形式,如图4所示。
2) Opcode的最高位称为Final bit,用来表示某一个request的最后一个packrt,这个在下面的例子中说明。
Response format

参数response code表示该response的类型,length表示整个request的字节数,最后跟着的是第2节中定义的各种Headers。
3) response code的最高位称为Final bit,用来表示可以继续传输数据 [11] ,这个在下面的例子中说明,其有如下几种,如图5所示。
3. 基于BlueSolei的蓝牙设备二次开发
利用OBEX协议自行开发的蓝牙传输系统传输速度为15 s/M,而采用BlueSolei的商业蓝牙产品,速度可以达到7 s/M。但这些设备需要手动操作完成文件传输等功能。因此,需要对商业蓝牙适配器进行二次开发,实现由程序控制文件等信息的处理。
论文采用基于BlueSolei的商业千月QY015蓝牙适配器4.0进行二次开发,实现文件传输原理是在手机端开启文件传输协议(Ftp)服务,计算机端访问Ftp服务。
3.1. 流程图设计
基于BlueSolei的蓝牙设备二次开发的流程图如图6所示。

Figure 6. Flowchart of two development of Bluetooth devices based on BlueSolei
图6. 基于BlueSolei的蓝牙设备二次开发的流程图
第一步,下载BlueSolei PC平台SDK,网址为: http://www.bluesoleil.com/products/S000120140708-0001.html
第二步,开发文件传输功能模块,产生独立可执行文件;
第三步,在手机端安装BlueToothFTP服务软件http://www.medieval.it/blueftp-pc/menu-id-70.html;
第四步,手机端开启ftp服务,pc端通过ftp功能完成文件的传输。
3.2. 文件传送与接收程序设计
@Override
//获取远程FTP服务器文件
public String pull(String localDoc, String androidDoc) { cu.runConsole(new String[]{BLEFTP 4 F +path+localDoc+ + androidDoc});
logger.info(pull BLEFTP 4 F +path+localDoc+ + androidDoc);
return cu.input;
}
//传送本地文件到远程FTP服务器
@Override
public String push(String localDoc, String androidDoc) {
cu.runConsole(new String[]{BLEFTP 5 F +path+localDoc+ + androidDoc});
logger.info(push BLEFTP 5 F +path+localDoc+ + androidDoc);
return cu.input;
}
4. 重传机制
手机端每次只能向计算机发20字节数据,如果要连续发送几百字节,如果不进行流量控制,就会丢包。根据规范,每次向SDK层写一包数据,SDK发送成功后,会有一个接口通知应用层。但在实际测试发现,某些手机采用这种方式控制流量,还是会丢包,只能在两包数据之间认为延迟50ms左右。在用蓝牙传输大文件,更容易产生丢包现象,为提高传输质量,设计了重传机制。
4.1. 重传机制流程图设计
重传机制流程图,如图7所示。

Figure 7. Flowchart of retransmission mechanism
图7. 重传机制流程图
第一步:传输
计算机通过蓝牙传输文件给手机,等待手机确认。
第二步:确认
计算机远程确认手机是否存在要传输的文件,如果存在,则告诉计算机传输结束,如果不存在,再进入重传过程。
第三步:重传
找到没有传输成功的文件,进入第一步。如果三次重传都没有成功,则提示传输失败。
4.2. 重传机制程序设计
int isok = 0; //定义isok为重传标志
int isdownloadAllTeskXMLok = 0;
//定义isdownloadAllTeskXMLok为文件存在标志
do{
isok++;
isdownloadAllTeskXMLok = xs.downloadAllTeskXML();
if(isdownloadAllTeskXMLok != 0 ){ //判断是否传输成功
isok=5;
}
Thread.sleep(1000);
}while(isok<=3);//三次重传
5. 性能测试
实测表明,用BlueSoleil + FTP这种方法比直接调用Obex协议传输速度提高了1倍,达到141.51 k/s。具体性能测试结果如表1所示:
由表1性能测试结果可知,针对大文件的传输,采用直接调用Obex协议的方法传输时间较长,而采用BlueSoleil + FTP这种方法传输时间缩短了一半。实验结果表明,相比于直接调用Obex协议,采用BlueSoleil + FTP这种方法传输速度提高了1倍,达到141.51 k/s。
6. 结束语
Bluetooth是近年来发展迅速的无线通信技术,它具有低成本、低功耗、简单方便的特点。文章首先分析了蓝牙OBEX传输协议,针对大文件传输问题,提出了BlueSoleil + FTP的大文件传输方法,并且设计三次重传机制保证了传输的稳定性。企业实际应用表明该方法性能优良,解决了蓝牙大文件传输问题。
基金项目
陕西省科技厅资助项目(编号:2017GY-070),陕西省教育厅资助项目(编号:17JK0377)西安市科技局资助项目(编号:2017075CG)。