Android Bluetooth OPP的理解与使用之三

问题点7 Android Bluetooth OPP sever创建socket Server从启动监听到被连接的过程

---基于OPP 文档,Client端主动发送object,而Server端被动接收object,且Server端不能主动连接,只能被连接;以上特性决定了OPP Server需要等待被连接;

当前Android Bluetooth 中OPP基于socket实现,其核心实现是ObexServerSockets, 具体作为socket Server等待监听的实现是startSocketListener 中的

ObexServerSockets.createInsecure(this)”;

-->ObexServerSockets.createInsecure(this), 返回ObexServerSockets对象;

-->执行到类ObexServerSockets中的 create方法:

这里同时创建RFCOMML2CAPsocket channel,当创建成功时,将执行

new ObexServerSockets(validator, rfcommSocket, l2capSocket);”并启动accept;

其中“validator”的作用是记录了上层的callback接口,以方便当socket被连接时,可以执行上层的callback 如“BluetoothOppService的onConnect”告知实际连接结果;

Note:注意与BluetoothOppObexServerSession中的onConnect区别:

BluetoothOppServiceonConnect是在socket被连接上时触发;

BluetoothOppObexServerSession中的onConnect是在OPP 被连接上后,通过Obex opcode 为“ObexHelper.OBEX_OPCODE_CONNECT”时触发;---在“ServerSession.java

(frameworks\base\obex\javax\obex)”中

-->执行到startAccept,分别创建rfcomml2cap的线程进行监听;

 -->当被连接时,将执行BluetoothOppServiceonConnect被执行;

若异常则对应执行“ObexServerSockets.this.onAcceptFailed();

 

 -->BluetoothOppService的onConnect中将发出

MessageMSG_INCOMING_BTOPP_CONNECTION 通知OPP被连接上;

-->执行case MSG_INCOMING_BTOPP_CONNECTION

正常将执行到“createServerSession”

 -->执行到“createServerSession”,

这里创建了一个“BluetoothOppObexServerSession” 对象进行新链路的管理,并通过preStart和Obex类ServerSession关联起来(Note : ServerSession.javaframework层的obex文件夹中)

 -->执行BluetoothOppObexServerSession的方法preStart,创建新的ServerSession 类;

ServerSessionObex类;

 所以至此,OPP Server被连接时建立的链路,交给了Obex ServerSession进行数据解析接收并解析

问题点8OPP Server 收到OBEX_OPCODE_CONNECT如何处理;

---由上一个问题点得知:当OPP Server被连接上时,其最终交给了ServerSession进行read的阻塞监听动作;

所以当OPP Server 收到data时,首先被触发的将是ServerSession的“public void run() {

-->如收到OBEX_OPCODE_CONNECT(0x80)

 

-->执行到handleConnectRequest

 最终通过:mOutput.write(sendData); mOutput.flush(); 回应response

NoteServerSession中还有标准的发送response API sendResponse

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值