中国a级毛片免费观看,啦啦啦资源视频在线完整免费高清,真人性囗交69视频,日本毛X片免费视频观看视频

rexian

咨詢電話:023-6276-4481

熱門文章

聯(lián)系方式

電 話:023-6276-4481

郵箱:broiling@qq.com

地址:重慶市南岸區(qū)亞太商谷6幢25-2

當前位置:網(wǎng)站首頁 > 技術(shù)文章 > VB.NET利用OBEX協(xié)議實現(xiàn)紅外線文件傳輸

VB.NET利用OBEX協(xié)議實現(xiàn)紅外線文件傳輸

編輯:Ethan 發(fā)表時間:2018-02-26 13:39:18
Ethan

十一月開始沒有做什么項目,每天站在在辦公室窗前靜靜地看著樓下的行人來來往往,然后等待著領工資的時刻。為了讓智慧的大腦不因無所事是而僵硬,我決定找點傷腦筋的事情來維持腦袋的正常運轉(zhuǎn)。經(jīng)過考慮,決定用VB.net實現(xiàn)紅外線文件傳輸?shù)睦獭?/span>

  一、OBEX協(xié)議淺析

  目前的紅外線傳輸大都遵循OBEX協(xié)議,這是由微軟、蘋果、諾基亞等公司專門為紅外線傳輸而制定的一整套協(xié)議規(guī)則。最新協(xié)議版本是1.3版,在官方網(wǎng)站上下載要20美元(有錢的可以去下,我反正是玩玩,叫我交錢是不可能的,本文中實現(xiàn)的依據(jù)是在網(wǎng)上找到的OBEX協(xié)議1.2版本的文檔)。協(xié)議文檔的第二章OBEX Object Model是關(guān)鍵部份,實現(xiàn)文件傳輸必須對這章說明仔細研究清楚。以下先就對這章的一些關(guān)鍵點進行講解。

  1、OBEX協(xié)議的對象模型

  1)OBEX協(xié)議使用一系列的數(shù)據(jù)包(header)來進行某種對象(通常是文件)的傳輸,其基本格式是這樣的:

  <Header ID>'數(shù)據(jù)包的標識
  <Header Value> '數(shù)據(jù)包內(nèi)的數(shù)據(jù)

  其中<Header ID>是個單字節(jié)(八位二進制)字符,這個字符的低六位標識數(shù)據(jù)包代表的意義,高兩位表示這個數(shù)據(jù)包的總長度的表達方式,如下表:

高倆位二進制數(shù)據(jù)意義
00這個數(shù)據(jù)包的<header Value>是一個以空字符結(jié)尾的unicode字符串
01這個數(shù)據(jù)包的<header Value>是一個以空字符結(jié)尾的單字節(jié)組成的字符串,<header Value>的前兩個字節(jié)數(shù)據(jù)組成的16位整數(shù)表示整個數(shù)據(jù)包的長度(包括<header id>及<header value>的總長)
10<header Value>的長度只有一個字節(jié)數(shù)據(jù)
11<header Value>的長度只有四個字節(jié)數(shù)據(jù),并以網(wǎng)格數(shù)據(jù)格式排列(高位數(shù)據(jù)放在低位字節(jié)中存儲)


  注意:在<header Value>的16位數(shù)據(jù)(如包的長度、Unicode字符在發(fā)送方均要做高位字放在低位字發(fā)送的處理。由于沒注意這個問題,我曾在開頭的四五天時間里嘔血數(shù)升而一直沒有成功將數(shù)據(jù)發(fā)送成功) 

  在應用中,數(shù)據(jù)包可以嵌套。也就是:Header Value可以包含其它的數(shù)據(jù)包,所以長度標識非常重要,它可以幫助軟件的實現(xiàn)根據(jù)包的長度迅速分離出包內(nèi)的數(shù)據(jù)。

  在本文實現(xiàn)中主要用到的數(shù)據(jù)包標識如下(其余的項請參閱詳細官方協(xié)議):

  常用數(shù)據(jù)包標識列表

十六進制值標識名稱標識含義
0x01Name標記對象的名稱(通常是文件的文件名)
0xC3Length以字節(jié)為單位計算的對象長度
0x44Time時間(以ISO 8601規(guī)范為標準)
0x480x49BodyEnd of Body標識一個對象數(shù)據(jù)塊的開始標識這是對象的最后一個數(shù)據(jù)塊


  OBEX協(xié)議數(shù)據(jù)對象傳輸是按照服務器端/客戶端的方式進行的,每個操作均提供一個操作碼以明確操作的含義。以下給出部分數(shù)據(jù)發(fā)送所需操作碼列表: 

0x80Connect標識申請開始一個對象傳輸會話,并可以在這個數(shù)據(jù)包中告知紅外接收方一些必要的兼容性信息。
0x81Disconnect標識對象傳輸會話結(jié)束
0x020x82PutFinal_Put發(fā)送對象的put動作(當標識為0x82時說明這是最后的一個Put動作)
0xA0Success說明接收端已成功收到put動作發(fā)送的所有數(shù)據(jù)(一般是在成功收到Final_Put標識的數(shù)據(jù)包后的反饋)
0x90Continue說明接收端已收到put動作發(fā)送的數(shù)據(jù),因為Final_Put還沒出現(xiàn),所以要求發(fā)送端繼續(xù)發(fā)送數(shù)據(jù)。


  發(fā)送方和接收方是的通信的基本格式如下:

字節(jié)0字節(jié)1,2字節(jié)三以后的數(shù)據(jù)
操作碼整個通信數(shù)據(jù)包的長度通訊的數(shù)據(jù)


  以下結(jié)合基本傳輸步驟,對上文列出的數(shù)據(jù)包使用方法進行講解:

  1、由發(fā)送方向接收文件的接收方進行連接請求。

  發(fā)送方需要使用的操作碼為Connect,在OBEX協(xié)議中對Connect數(shù)據(jù)包格式作如下規(guī)定:

字節(jié)0字節(jié)1、2字節(jié)3字節(jié)4字節(jié)5、6字節(jié)7
Connect操作碼(0x80)Connect數(shù)據(jù)包的總長度OBEX協(xié)議的版本(目前為1.0,16進制表示為0x10)保留未用,設為0最大可處理的OBEX包長度其它的數(shù)據(jù)包(可選)


  服務端根據(jù)連接的請求向客戶端做出響應:

字節(jié)0字節(jié)1、2字節(jié)3字節(jié)4字節(jié)5、6字節(jié)7
響應的操作碼響應數(shù)據(jù)包的總長度OBEX協(xié)議的版本(目前為1.0,16進制表示為0x10)保留未用,設為0最大可處理的OBEX包長度其它的數(shù)據(jù)包(可選)


  如果接收方允許連接,響應的操作碼會為Success(0xA0)其它的響應操作碼均被認為連接失敗。

  2、發(fā)送方向接收方發(fā)送數(shù)據(jù)

  發(fā)送方通過put和Final_Put這兩個操作將傳輸?shù)臄?shù)據(jù)信息向接收方發(fā)送。

  發(fā)送方的Put/Final_Put使用格式。

字節(jié)0字節(jié)1,2字節(jié)三以后的數(shù)據(jù)
Put操作碼(0x02)Final_Put操作碼(0x82)整個通信數(shù)據(jù)包的長度通訊的數(shù)據(jù)(由其它的例如name/body等數(shù)據(jù)包構(gòu)成)


  當最后一次傳輸對象的數(shù)據(jù)時要使用Final_Put告知接收方這是最后一個數(shù)據(jù)包了,以便接收方根據(jù)接收到的數(shù)據(jù)進行處理(例如將接收到的文件存盤)。

  接收方的響應格式:

字節(jié)0字節(jié)1,2字節(jié)三以后的數(shù)據(jù)
響應操作碼典型的有兩個值:Success操作碼(0xA0)Continue操作碼(0x90 )整個通信數(shù)據(jù)包的長度通訊的數(shù)據(jù)(由其它的例如name/body等數(shù)據(jù)包構(gòu)成)


  如果接收方成功收到put操作的數(shù)據(jù),應該返回Continue開始的響應信息,告知發(fā)送方繼續(xù)發(fā)送,在成功收到Final_Put發(fā)送的數(shù)據(jù)后,應返回Success響應信息,告知發(fā)送方整個對象都接收完成。(但由于部分適配器只會返回Success響應,出于兼容性考慮,在編程中應理解為無論接收到Success或Continue響應都代表數(shù)據(jù)發(fā)送成功。)

  3、發(fā)送方關(guān)閉連接

  發(fā)送方在最后應以Disconnect信息明確結(jié)束連接,這并不是必須的,但推薦使用。

  發(fā)送方格式:

字節(jié)0字節(jié)1,2字節(jié)三以后的數(shù)據(jù)
Disconnect操作碼整個通信數(shù)據(jù)包的長度可選的通訊的數(shù)據(jù)(由其它的數(shù)據(jù)包構(gòu)成)


  接收方響應:

字節(jié)0字節(jié)1,2字節(jié)三以后的數(shù)據(jù)
Success操作碼(0xA0)服務不可用操作碼(0xD3)整個通信數(shù)據(jù)包的長度可選的通訊的數(shù)據(jù)(由其它的數(shù)據(jù)包構(gòu)成)


  當成功斷開時,接收方會發(fā)送Success信息。否則,如果發(fā)送方的disconnect操作包含錯誤信息(例如一個錯誤的連接ID)時,會返加0xD3操作碼。但并不能操作所有接收方的程序都實現(xiàn)這個響應的功能,也就是說,發(fā)送方并不能保證一定會得到響應信息。