.net手机软件开发(5)——OBEX介绍

** (一) ** ** OBEX ** ** 介绍 **

** 一、什么是 OBEX ** ** ,它有什么用途? **

OBEX 全称为 Object Exchange ,中文对象交换,所以称之为对象交换协议。它在此软件当中有着核心地位,文件传输和 IrMC 同步都会使用到它。

OBEX 协议构建在 IrDA 架构的上层.

OBEX 协议通过简单的使用“ PUT ”和“ GET ”命令实现在不同的设备、不同的平台之间方便、高效的交换信息。支持的设备广泛,例如 PC , PDA ,电话,摄像头,自动答录机,计算器,数据采集器,手表等等。

OBEX 协议定义了一种柔性的概念—— objects 。也即是对象。这些对象可以包括文件,诊断信息,电子商务卡片,银行的存款等等。 Objects 在这里没有高级的技术含义,而是视你的应用而定。

OBEX 协议小到可作“命令和控制”功能,例如对电视机,录像机等的操作。大道可以做很复杂的操作,例如数据库的事务处理和同步。

OBEX 能够具有以下几个特点:

1、 友好的应用——可实现快速开发。

2、 紧缩——可用在资源有限的小型设备上。

3、 跨平台

4、 柔性的数据支持。

5、 方便的作为其他 Internet 传输协议的上层协议。

6、 可扩展性——提供了对未来需求的扩充支持而不影响以存在的实现。例如可扩展安全,数据压缩等。

7、 可测试可调试。

更为具体的关于 OBEX 的介绍请查阅 IrOBEX 协议。

** 二、 OBEX ** ** 对象模型 **

** 关于 Headers **

对象模型回答了对象是如何在 OBEX 协议描述的。这个模型必须包括被传输的对象和对对象的描述。为了做到这点, OBEX 定义了 Headers 的概念。

一个 Header 反映了对象的一个方面,例如名字、长度、描述文字或者对象本身。例如,一个文件对象 demo.txt 会包含它的名字,一个类型标示为“ text ”,长度和文件本身。

** Headers ** ** 的构成 **

Headers 简单的由

  1<header id=""> 和  <header value=""> 组成,简称为  <hi> 和  <hv> 。 
  2
  3HI  由一个字节组成,指出了  Header  包含的内容以及它的格式。  HV  包含了一个或者多个字节,其结构由  HI  所决定。 
  4
  5所有的  Header  都是可选的,取决于设备的类型和事务的种类。你可以使用所有的  Header  ,或者一些,或者没有。  ID  可以使  Header  可解析以及与传输顺序无关,也可以使不支持的  Header  被忽略掉。 
  6
  7HI  又可以分为两部分,高  2  位和低  6  位。高  2  位确定了  HI  的编码方式(见表二),低  6  位确定了  HI  的意义(见表三)。两个表都是我从  IrOBEX  中的表摘抄并部分翻译过来的。 
  8
  9** 表二  **
 10
 11** HI  ** ** 的第  8  ** ** 和第  7  ** ** 位  **
 12
 13| 
 14
 15** 意义  **  
 16  
 17---|---  
 18  
 1900(0x00) 
 20
 21| 
 22
 23以  Null  (  0x00  )结尾的的  Unicode  文字。  2  个字节的无符号整数长度前缀。   
 24  
 2501(0x40) 
 26
 27| 
 28
 29Byte  块,  2  个字节的无符号整数前缀。   
 30  
 3110(0x80) 
 32
 33| 
 34
 351Byte  容量。   
 36  
 3711(0xC0) 
 38
 39| 
 40
 414Byte  容量,以高位先传输为原则。   
 42  
 43** 表三  **
 44
 45** HI  **
 46
 47| 
 48
 49** Header  ** ** 名称  **
 50
 51| 
 52
 53** 描述  **  
 54  
 55---|---|---  
 56  
 570xC0 
 58
 59| 
 60
 61Count 
 62
 63| 
 64
 65连接中用于指名对象的数量。   
 66  
 670x01 
 68
 69| 
 70
 71Name 
 72
 73| 
 74
 75对象的名字。一般为文件名。   
 76  
 770x42 
 78
 79| 
 80
 81Type 
 82
 83| 
 84
 85对象的类型。例如  text,html,binary,manufacture specific   
 86  
 870x44 
 88
 890xC4 
 90
 91| 
 92
 93Time 
 94
 95| 
 96
 97时间戳。  ISO 8601  版本    
 98时间戳。  4Byte  版本(用于兼容)   
 99  
1000x05 
101
102| 
103
104Description 
105
106| 
107
108对对象的文本描述   
109  
1100x46 
111
112| 
113
114Target 
115
116| 
117
118操作的目的服务名   
119  
1200x47 
121
122| 
123
124HTTP 
125
126| 
127
128一个  HTTP1.x  头   
129  
1300x48 
131
132| 
133
134Body 
135
136| 
137
138对象的一部分   
139  
1400x49 
141
142| 
143
144End of body 
145
146| 
147
148对象的最后一部分   
149  
1500x  4A 
151
152| 
153
154Who 
155
156| 
157
158OBEX Application  标识,用于表明是否是同一个应用。   
159  
1600xCB 
161
162| 
163
164Connection ID 
165
166| 
167
168用于  OBEX  多路连接的标识   
169  
1700x  4C 
171
172| 
173
174App.Parameters 
175
176| 
177
178扩展的应用层请求和回复信息   
179  
1800x4D 
181
182| 
183
184Auth.Challenge 
185
186| 
187
188Authentication digest-challenge   
189  
1900x4E 
191
192| 
193
194Auth.Response 
195
196| 
197
198Authentication digest-response   
199  
2000x  4F 
201
202| 
203
204Object Class 
205
206| 
207
208对象的  OBEX  对象类   
209  
2100x10 to 0x  2F 
211
212| 
213
214Reserved 
215
216| 
217
218保留   
219  
2200x30 to 0x  3F 
221
222| 
223
224User defined 
225
226| 
227
228用户自定义的。   
229  
230** 关于常用  Header  ** ** 的更详尽的解释,更详尽信息请参考  IrOBEX  **
231
232** 1  ** ** 、  Name   
233** Name  是一个用来描述对象名称的  Header  ,由以  Null(0x00)  结尾的  Unicode  字符串组成。例如:  DEMO.TXT 
234
235** 2  ** ** 、  Length   
236** Length  描述了对象的大小,由  4  个字节组成。如果  Length  事先知道,这个  Header  应该被用到。这样可以让接受者迅速的知道需要分配多少空间,可使处理更为迅速。但这也不是必须的,有些情况下长度无法确认,但设备可以通过  End-Body Header  知道什么时候结束。 
237
238** 3  ** ** 、  Time  **
239
240Time  描述了对象的最后修改的时间。使用  ISO8601  格式。 
241
242本地时间格式:  YYYYMMDDTHHMMSS ** **
243
244UTC  时间格式:  YYYYMMDDTHHMMSSZ 
245
246格式中的  T  可以方便的区分日期和时间。  UTC  时间使用  Z  作为标记。建议使用  UTC  时间。    
247**4** ** 、  Body  ** ** 、  End-of-Body  **
248
249** ** Body Header  由  HI  、一个  2Byte  长度的描述和整个的对象本身。  End-of-Body  组成和  Body  组成一样,但标识了这是对象的最后一部分。如果对象本来就很小,就直接使用  End-of-Body  。 
250
251** 三、请求(  Request  ** ** )和回应(  Response  ** ** )  **
252
253OBEX  使用  Request  和  Response  作为最基本的操作。请求的每个  Request  必然有一个  Response  ,否则可认为  Request  失败。 
254
255Request  由一个或多个的  Packet  (包)组成,每个包的结构如下表 
256
257Request  数据包结构 
258
259&lt;TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: gray; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 142pt; PA</hv></hi></header></header>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus