蓝牙--对象交换协议(OBEX)
1.OBEX协议概述
OBEX是IrOBEX的简称,IrOBEX协议是红外数据协会IrDA开发的用于红外数据链路上数据对象交换的会话层协议.OBEX是一种紧凑高效的二进制协议,功能类似于HTTP协议。为了支持不同的平台,OBEX不指定特定的传输数据类型,只定义传输对象(Object).
OBEX在蓝牙系统中被映射到RFCOMM和TCP/IP层之上,其中OBEX over TCP/IP是作为可选项出现的.蓝牙只支持面向连接的OBEX应用.IrDA则同时支持面向连接和无连接的应用.
OBEX协议本身分为两部分:数据对象模型和会话协议.对象模型包括了将要传输的数据对象的各种信息以及数据对象本身.该模型的建立完全基于各种标准的或者用户自定义的可分析的信息头(Headers),类似于Http中的信息头.会话协议则规定了设备间的数据传输过程,OBEX使用基于二进制分组结构的客户机/服务器模式作为该过程的模型.
2.OBEX对象模型
对象模型描述了对象在OBEX协议中如何表示。这个模型必须能够表示出被传输的对象信息。OBEX协议使用了将各个不同的功能数据块按顺序组合成可选头的方法来解决问题.可选头是一个能够描述被传输对象某些性质的实体单元,这些性质包括名字、长度、叙述性文本、或者是被传输对象本身.
2.1 OBEX可选分组头.
OBEX可选头的基本形式为: .其中,HI为无符号单字节整数,用它来确定头包括的内容以及头的组成格式.HV由一个或多个字节按照HI的值指定的格式以及内容组成。根据设备类型以及传输内容特性的不同,头的内容是可选的,可以不用头,用部分头,或者是全部的头。头HI部分的低6位表示头的意思,高2位表示头的编码方式。HV中长度前缀的编码方式在网络中按字节顺序传送,长度包括1字节的HI以及2字节的长度前缀本身(本身).
3. 会话协议
3.1 会话协议概述
OBEX操作采用请求-应答模式.客户端发出请求,服务器应答。在客户端收到请求应答之前,将等待服务端的应答而不发送下一个请求.
请求分组由一字节的操作码、2字节的长度标识以及不定字节长度的分组头或者请求数据组成。应答分组由一字节的应答码、2字节的长度标识以及不定字节的应答数据组成。
3.2 连接操作
3.3 连接断开操作
3.4 推操作
3.5拉操作
3.6 取消(Abort)操作
3.7设置路径操作
蓝牙--对象交换协议(OBEX)的更多相关文章
- 简易远程消息交换协议SRMP
一.SRMP目标定位 经过十多年实战经验积累以及多方共同讨论,新生命团队(https://github.com/newlifex)制订了一种简单而又具有较好扩展性的RPC(Remote Procedu ...
- 自研DCI网络路由交换协议DCIP-白牌交换机时代的企业网络
一转眼从听华为3Com的路由交换课程到如今已经13年有余了,依稀记得第一节课的时候我带着老婆去听的课(老婆是日语系的.那时还是女朋友,并不懂网络,仅仅是跟着我去上课的).抢了个头排,讲师宋岩老师提问了 ...
- ZT 蓝牙的AVCTP协议笔记
蓝牙的AVCTP协议笔记 (2013-07-31 08:52:41) 转载▼ 标签: bluetooth avctp command response 分类: Bluetooth 1.概述 A ...
- ZT 蓝牙的AVDTP协议笔记
我的电子杂烩饭 http://blog.sina.com.cn/wuchuchu2012 [订阅][手机订阅] 首页 博文目录 图片 关于我 个人资料 Tifnan Qing 微博 加好友 发纸条 写 ...
- 社区观点 | 理解比原链MOV链上交换协议
去中心化交换协议的发展 从Bitshare,Stellar到以太坊上的Etherdelta,Bancor,0x协议,去中心化交换协议也经过了好几代发展和很多模式的探索,每一代都通过前面的协议的痛点来进 ...
- C++ 运算符重载时,将运算符两边对象交换问题.
在C++进行运算符重载时, 一般来讲,运算符两边的对象的顺序是不能交换的. 比如下面的例子: #include <iostream> using namespace std; class ...
- 蓝牙的AVCTP协议笔记
1.概述 AVCTP协议描述了蓝牙设备间Audio/Video的控制信号交换的格式和机制,它是一个总体的协议,具体的控制信息由其指定的协议(如AVRCP)实现,AVCTP本身只指定控制comm ...
- 蓝牙的AVDTP协议笔记
1.概述 AVDTP(AUDIO/VIDEO DISTRIBUTION TRANSPORT PROTOCOL)是用来描述音频/视频在蓝牙设备间的传输的协议,是A2DP协议的基础协议,其在协议栈中 ...
- 蓝牙的L2CAP协议
1.概述 L2CAP能向上层提供面向连接的或者无连接的数据服务,拥有multiplexing capability and segmentation and reassembly operat ...
随机推荐
- Golang 安装及配置教程 for Mac
1.到golang.org下载golang 并安装. 2.安装sublimetext ,打开之后 按ctrl+` 打开命令行,输入以下内容: import urllib2,os; pf='Packag ...
- c++ 服务端 客户端
转载自:http://blog.csdn.net/orange_xxx/article/details/7276868 ,谢谢原作者. 作为个人学习的笔记使用. 服务端: // Server.cpp ...
- wordpress安装步骤
步骤1.因为安装Wordpress需要用到Apache和Mysql数据库,可以选择单独安装这两个软件,但配置参数设置起来可能会遇到一些困扰,建议大家下载现成的PHP和Mysql的集成安装包,比如XAM ...
- Shell 编程基础之 While 练习
一.语法 while [ condition ] # 当 condition 条件成立时,就进行循环,直到条件不成立停止 do #执行内容 done 二.练习 输入用户输入的参数,直到用户输入 &qu ...
- node.js第一次
随着时代的变迁,日月星辰轮回,不断的有新的事物被创造于世,作为在这个世界活着的前端工程崽的我,最近又接触了一门新手艺“node.js”.自从它2009年诞生至今,被很多前端推崇,我起步已经晚了,还好它 ...
- unity 解析xml
using UnityEngine; using System.Collections; using System.IO; using System.Xml; public class xml : M ...
- Android中使用Handler造成内存泄露
1.什么是内存泄露? Java使用有向图机制,通过GC自动检查内存中的对象(什么时候检查由虚拟机决定),如果GC发现一个或一组对象为不可到达状态,则将该对象从内存中回收.也就是说,一个对象不被任何引用 ...
- BZOJ3835: [Poi2014]Supercomputer
Description Byteasar has designed a supercomputer of novel architecture. It may comprise of many (id ...
- iOS9 tableVIewCell的分割线不显示,只有在滑动的时候才显示?
1.如果用6plus模拟器的话,电脑分辨率达不到那么高,因此就看不到分割线. 2.把模拟器换成6s 或 5s,就没问题了.
- 如何让代码实现C++
其实本来就知道 但是主要突然忘了去怎样实现C++代码 ,所以写个笔记记忆一下 让代码实现C++ 只需要修改.m文件为 .mm 就可以了 突然是不是很像打脸. 不过希望能给不知道的小伙伴一点帮助哦 ...