Linux下基于bluez 与openobex库实现蓝牙传输,目前实现的基本流程为:
inquiry--->通过SDP获得对方channel--->创建线程
线程实现对查询到的蓝牙设备发送文件,主要操作包括:创建一个obex instance handle、socket处理、建立连接、发送文件等;
实际测试过程中,发现非常的不稳定,经常出现连接失败的问题,每次能够同时建立连接的蓝牙设备个数不定,连接失败出现的错误信息为“Device or resource busy”,很郁闷,跟踪调试发现sockt创建与绑定都没有问题,而是在实现socket connect的时候出现问题,又不能进到里面看看。
今天在msn上跟一个朋友聊起了这个问题,却被他一语点破(当然还没有彻底明白,但是知道怎么回事了,他说受蓝牙跳频技术的影响,在两个蓝牙设备建立连接之前,两个设备之间的跳频序列是不确定的,同时连接就会互相干扰,所以蓝牙连接的建立要依次实现,但是连接建立之后,两个蓝牙设备之间的跳频序列就确定了,可是同时进行数据的传输,是没有问题的。