我爱Aspx >> C#.Net >> VB.NET利用OBEX协议实现红外线文件传输十一月开始没有做什么项目,每天站在在办公室窗前静静地看着楼下的行人来来往往,然后等待着领工资的时刻。为了让智慧的大脑不因无所事是而僵硬,我决定找点伤脑筋的事情来维持脑袋的正常运转。经过考虑,决定用VB.net实现红外线文件传输的例程。
一、OBEX协议浅析目前的红外线传输大都遵循OBEX协议,这是由微软、苹果、诺基亚等公司专门为红外线传输而制定的一整套协议规则。最新协议版本是1.3版,在官方网站上下载要20美元(有钱的可以去下,我反正是玩玩,叫我交钱是不可能的,本文中实现的依据是在网上找到的OBEX协议1.2版本的文档)。协议文档的第二章OBEX Object Model是关键部份,实现文件传输必须对这章说明仔细研究清楚。以下先就对这章的一些关键点进行讲解。
1、OBEX协议的对象模型
1)OBEX协议使用一系列的数据包(header)来进行某种对象(通常是文件)的传输,其基本格式是这样的:
<Header ID>'数据包的标识
<Header Value> '数据包内的数据
其中<Header ID>是个单字节(八位二进制)字符,这个字符的低六位标识数据包代表的意义,高两位表示这个数据包的总长度的表达方式,如下表:
| 高俩位二进制数据 | 意义 |
| 00 | 这个数据包的<header Value>是一个以空字符结尾的unicode字符串 |
| 01 | 这个数据包的<header Value>是一个以空字符结尾的单字节组成的字符串,<header Value>的前两个字节数据组成的16位整数表示整个数据包的长度(包括<header id>及<header value>的总长) |
| 10 | <header Value>的长度只有一个字节数据 |
| 11 | <header Value>的长度只有四个字节数据,并以网格数据格式排列(高位数据放在低位字节中存储) |
注意:在<header Value>的16位数据(如包的长度、Unicode字符在发送方均要做高位字放在低位字发送的处理。由于没注意这个问题,我曾在开头的四五天时间里呕血数升而一直没有成功将数据发送成功)
在应用中,数据包可以嵌套。也就是:Header Value可以包含其它的数据包,所以长度标识非常重要,它可以帮助软件的实现根据包的长度迅速分离出包内的数据。
在本文实现中主要用到的数据包标识如下(其余的项请参阅详细官方协议):
常用数据包标识列表
| 十六进制值 | 标识名称 | 标识含义 |
| 0x01 | Name | 标记对象的名称(通常是文件的文件名) |
| 0xC3 | Length | 以字节为单位计算的对象长度 |
| 0x44 | Time | 时间(以ISO 8601规范为标准) |
| 0x480x49 | BodyEnd of Body | 标识一个对象数据块的开始标识这是对象的最后一个数据块 |
Visual Basic .Net打造个性化菜单[04-30]
ASP.NET2.0导航功能之配置会员和..[04-30]
揭开.NET消息循环的神秘面纱[04-30]
VB.NET实现PC与掌上电脑PPC的双向..[04-30]
ASP.NET 2.0移动开发入门之基础[04-30]
ASP.NET服务器控件之RenderConte..[04-30]
C++:最强大的.NET语言之内存与资..[04-30]
C++:最强大的.NET语言之装箱[04-30]
ASP.NET服务器控件之视图状态[04-30]
ASP.NET 2.0的视图状态持久性机制[04-30]
基于Windows通讯基础的事务性服务..[04-30]
Visual C++ 2005中的命名返回值优..[04-30]
Visual Basic .Net打造个性化菜单[04-30]
C++/CLR泛型与C++模板之间的对比[04-30]
体验Visual C++ 2005的现代语言特..[04-30]
C++/CLI:第一流的CLI语言[04-30]
C++/CLI:第一流的CLI语言[04-30]
C++/CLI:第一流的CLI语言[04-30]
C++/CLI:第一流的CLI语言[04-30]
用好2005之使用强类型DataSet简化..[04-30]