VB.NET利用OBEX协议实现红外线文件传输
字节0 | 字节1、2 | 字节3 | 字节4 | 字节5、6 | 字节7 |
响应的操作码 | 响应数据包的总长度 | OBEX协议的版本(目前为1.0,16进制表示为0x10) | 保留未用,设为0 | 最大可处理的OBEX包长度 | 其它的数据包(可选) |
如果接收方允许连接,响应的操作码会为Success(0xA0)其它的响应操作码均被认为连接失败。
2、发送方向接收方发送数据
发送方通过put和Final_Put这两个操作将传输的数据信息向接收方发送。
发送方的Put/Final_Put使用格式。
字节0 | 字节1,2 | 字节三以后的数据 |
Put操作码(0x02)Final_Put操作码(0x82) | 整个通信数据包的长度 | 通讯的数据(由其它的例如name/body等数据包构成) |
当最后一次传输对象的数据时要使用Final_Put告知接收方这是最后一个数据包了,以便接收方根据接收到的数据进行处理(例如将接收到的文件存盘)。
接收方的响应格式:
字节0 | 字节1,2 | 字节三以后的数据 |
响应操作码典型的有两个值:Success操作码(0xA0)Continue操作码(0x90 ) | 整个通信数据包的长度 | 通讯的数据(由其它的例如name/body等数据包构成) |
如果接收方成功收到put操作的数据,应该返回Continue开始的响应信息,告知发送方继续发送,在成功收到Final_Put发送的数据后,应返回Success响应信息,告知发送方整个对象都接收完成。(但由于部分适配器只会返回Success响应,出于兼容性考虑,在编程中应理解为无论接收到Success或Continue响应都代表数据发送成功。)
3、发送方关闭连接
发送方在最后应以Disconnect信息明确结束连接,这并不是必须的,但推荐使用。
发送方格式:
字节0 | 字节1,2 | 字节三以后的数据 |
Disconnect操作码 | 整个通信数据包的长度 | 可选的通讯的数据(由其它的数据包构成) |
接收方响应:
字节0 | 字节1,2 | 字节三以后的数据 |
Success操作码(0xA0)服务不可用操作码(0xD3) | 整个通信数据包的长度 | 可选的通讯的数据(由其它的数据包构成) |
当成功断开时,接收方会发送Success信息。否则,如果发送方的disconnect操作包含错误信息(例如一个错误的连接ID)时,会返加0xD3操作码。但并不能操作所有接收方的程序都实现这个响应的功能,也就是说,发送方并不能保证一定会得到响应信息。
二、程序实现
.net1.0中对红外的支持全部在System.Net.Sockets空间中,使用很简单,和普通的网络连接差不多,主要有三个类:
IrDAClient | 提供连接信息,并创建客户端连接对象,用以打开和关闭与服务器的连接。 |
IrDADeviceInfo | 提供客户端在发现查询过程中获取的有关可用服务器和端口的信息。 |
IrDAListener | 将套接字置于侦听状态,以监视来自指定服务或网络地址的连接。 |
(一)、获取附近可用红外设备的信息
在这个示例中,我获取红外设备通过IrDAClient的DiscoverDevices方法实现,该方法以IrDADeviceInfo类型的对象数组返回附近可用红外设备的相关信息。这个方法唯一的参数表示如果附近有许多红外设备时,最多收集多少个设备的信息。
示例代码如下:
Dim taobjIrDADeviceInfo() As Sockets.IrDADeviceInfo Dim tobjIrDAClient As New Sockets.IrDAClient '开始检索附近的红外设备并加入到列表中,最多只搜索7个设备 taobjIrDADeviceInfo = tobjIrDAClient.DiscoverDevices(7) |
在得到的IrDADeviceInfo类型的变量有三个有用的属性,你可根据这些属性的值给用户提示,以便由用户选择应连接到那一个红外设备上:
DeviceID 获取红外设备标识符,在连接红外设备中使用
DeviceName 获取红设备名称。
Hints 获取设备的类型,例如是红外手机还是红外PDA之类的说明
天极yesky
Tags:
作者:佚名评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论