




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、基于藍(lán)牙的手機(jī)廣告發(fā)布系統(tǒng)姓名: xxx 學(xué)號(hào): xxxxxx摘要:本文只要介紹了藍(lán)牙無(wú)線通信技術(shù)和藍(lán)牙設(shè)備之間通過(guò)obex協(xié)議實(shí)現(xiàn)信息交換(傳輸圖片,視頻等)的基本方法,并在j2me平臺(tái)上開(kāi)發(fā)了一個(gè)簡(jiǎn)易的手機(jī)廣告發(fā)布系統(tǒng)。關(guān)鍵字:藍(lán)牙技術(shù);藍(lán)牙協(xié)議棧;j2me;obex1. 引言藍(lán)牙技術(shù)1是目前被認(rèn)可的短距離無(wú)線通信技術(shù),廣泛應(yīng)用于手機(jī)、電腦以及汽車(chē)免提系統(tǒng)。以藍(lán)牙技術(shù)為依托,在室內(nèi)或室外布置一系列稱(chēng)作藍(lán)牙廣播站的藍(lán)牙設(shè)備,通過(guò)這些設(shè)備自動(dòng)搜索覆蓋范圍內(nèi)(目前多在100m以?xún)?nèi))的藍(lán)牙終端(手機(jī)、pda、pc等),而后詢(xún)問(wèn)用戶(hù)是否愿意接收一個(gè)廣告文件(圖片、視頻、文本文檔等等多種多樣的信息形式
2、),經(jīng)過(guò)允許后方可向用戶(hù)發(fā)送數(shù)據(jù)信息。與傳統(tǒng)的平面或視頻廣告媒體相比,藍(lán)牙媒體具有先進(jìn)而強(qiáng)大的技術(shù)背景和功能承載。通過(guò)藍(lán)牙,將信息直接送達(dá)用戶(hù)手機(jī)中,商家與消費(fèi)者之間形成互動(dòng),拉近兩者的空間距離,縮短了營(yíng)銷(xiāo)手段與購(gòu)買(mǎi)行為的時(shí)間周期。本文設(shè)計(jì)了一種內(nèi)嵌藍(lán)牙模塊的手機(jī)之間的廣告發(fā)布系統(tǒng)。2. 背景介紹2.1. 藍(lán)牙技術(shù)藍(lán)牙技術(shù)是由愛(ài)立信、諾基亞、東芝、intel和ibm于1998年5月聯(lián)合推出的。這一技術(shù)推出后迅速得到了包括摩托羅拉、西門(mén)子、3com、tdk等大公司在內(nèi)的許多廠商的支持和采納。到2000年5月,采用藍(lán)牙技術(shù)的公司已經(jīng)超過(guò)1900家,使得這種技術(shù)成為有史以來(lái)發(fā)展最快的通信技術(shù)。藍(lán)牙技
3、術(shù)是一種低成本、短距離的無(wú)線接入技術(shù),是實(shí)現(xiàn)語(yǔ)音和數(shù)據(jù)無(wú)線傳輸?shù)拈_(kāi)放性標(biāo)準(zhǔn)。藍(lán)牙技術(shù)的目標(biāo)是提供一種通用的無(wú)線接口標(biāo)準(zhǔn),用無(wú)線鏈路代替?zhèn)鹘y(tǒng)網(wǎng)絡(luò)中的電纜連接,在藍(lán)牙設(shè)備間實(shí)現(xiàn)方便靈活、安全快捷的數(shù)據(jù)和語(yǔ)言傳輸。藍(lán)牙技術(shù)采用調(diào)頻擴(kuò)譜(frequency hopping spread spectrum)技術(shù),在2.45ghzism頻帶上以1600 hop/s的速率進(jìn)行跳頻,采用低功率時(shí)分復(fù)用方式發(fā)射,可在10m范圍內(nèi)進(jìn)行無(wú)線通信,如果增加發(fā)射功率,其通信距離可達(dá)100m。當(dāng)發(fā)射頻率帶寬為1mhz時(shí),其有效數(shù)據(jù)傳輸速度為721kbps。藍(lán)牙技術(shù)采用快跳頻方式,短分組技術(shù)和向前技術(shù)和前向糾錯(cuò)(fec)編
4、碼技術(shù)確保傳輸?shù)目煽啃?。藍(lán)牙技術(shù)既支持點(diǎn)對(duì)點(diǎn)的連接也支持點(diǎn)對(duì)多點(diǎn)的連接,若干個(gè)相互獨(dú)立的藍(lán)牙設(shè)備,以特定方式連成一個(gè)微微網(wǎng),在一個(gè)微微網(wǎng)中一臺(tái)設(shè)備可同時(shí)與七臺(tái)從設(shè)備進(jìn)行通信。根據(jù)現(xiàn)有規(guī)范,幾個(gè)這樣的微微網(wǎng)連接在一起可以建立一個(gè)結(jié)構(gòu)非常靈活的分布式網(wǎng)絡(luò)。不同的微微網(wǎng)采用的跳頻序列有所不同,但在同一個(gè)微微網(wǎng)中,所有的設(shè)備都使用同一個(gè)跳頻序列進(jìn)行同步,且所有的藍(lán)牙設(shè)備都是對(duì)等的,以同樣的方式工作。當(dāng)一個(gè)微微網(wǎng)建立時(shí),只有一臺(tái)設(shè)備是主設(shè)備,即提供同步時(shí)鐘和跳頻序列的設(shè)備,其他均為從設(shè)備。且在這個(gè)微微網(wǎng)存在期間,一直都保持這一狀況。 2.2. 藍(lán)牙技術(shù)的近期和長(zhǎng)遠(yuǎn)目標(biāo)長(zhǎng)期以來(lái),現(xiàn)代通信技術(shù)致力于遠(yuǎn)距離的
5、寬帶通信網(wǎng)和全球漫游式的無(wú)線通信,企圖把全世界的每一個(gè)角落都納入有線或無(wú)線的網(wǎng)絡(luò)之中,但是近距離的數(shù)字通信卻一直被忽略,直到上世紀(jì)末才提上了議事日程。藍(lán)牙技術(shù)所要解決的問(wèn)題是在10m范圍內(nèi)實(shí)現(xiàn)各種電子產(chǎn)品信息的無(wú)線傳輸,消除它們之間縱橫交錯(cuò)的連接電纜。為此,它必須達(dá)到如下一些技術(shù)要求:完好的替代功能:藍(lán)牙技術(shù)所用的無(wú)線通道必須要像有線電纜一樣準(zhǔn)確無(wú)誤地發(fā)送或接收數(shù)據(jù),而無(wú)線通道上信息的傳播環(huán)境比有線通道受到的干擾多得多、傳送環(huán)境復(fù)雜得多。信息安全功能:電波在空間傳播時(shí)會(huì)出現(xiàn)散射現(xiàn)象,于是無(wú)線信道傳送的保密程度將遠(yuǎn)低于有線信道,藍(lán)牙信息的安全問(wèn)題不能忽視。承載能力:同時(shí)連接多個(gè)設(shè)備,要有足夠的傳
6、輸速率,支持不同類(lèi)型(如聲音和數(shù)據(jù))的信息發(fā)送或接收。超低功率:設(shè)備可用電池供電。致密性高:藍(lán)牙芯片內(nèi)部結(jié)構(gòu)復(fù)雜但體積小。全球通用:使用戶(hù)能在世界各地方便使用。藍(lán)牙網(wǎng)絡(luò)功能:藍(lán)牙技術(shù)把計(jì)算機(jī)、家電、通信等領(lǐng)域中的電子產(chǎn)品使用無(wú)線方式連接,自然而然形成一個(gè)以使用者個(gè)人為中心的網(wǎng)絡(luò),稱(chēng)為個(gè)人區(qū)域網(wǎng)。 這個(gè)網(wǎng)絡(luò)的性質(zhì)有兩條,就是可移動(dòng)性和自動(dòng)接入性。所謂 “可移動(dòng)性”是指能隨時(shí)隨地聯(lián)網(wǎng)或下網(wǎng),進(jìn)、入網(wǎng)的終端不受限制。所謂“自動(dòng)接入”是指藍(lán)牙設(shè)備所具備的入網(wǎng)方式不受接入點(diǎn)或服務(wù)器的制約,在一定的空間范圍內(nèi)和接入數(shù)量有規(guī)定的情況下,自動(dòng)建立與其它藍(lán)牙設(shè)備之間的聯(lián)系。聯(lián)系過(guò)程是自動(dòng)完成的,不需要人為干預(yù)。
7、藍(lán)牙技術(shù)的實(shí)現(xiàn)有賴(lài)于硬件電路和軟件程序的雙重支撐。硬件電路是一種1cm見(jiàn)方的嵌入式微功率芯片,如此小的體積、功率便于它嵌入到普通電子產(chǎn)品中;控制軟件的職責(zé)是搜索并聯(lián)系其它也嵌入有藍(lán)牙芯片的電子產(chǎn)品,聯(lián)系過(guò)程是一場(chǎng)信息交換的過(guò)程。通過(guò)發(fā)送、接收無(wú)線電波實(shí)現(xiàn)信息交換,發(fā)送功率越大,傳播的距離就越遠(yuǎn)。但它們并不成正比,通常 100mw的發(fā)射功率可傳輸100m。而1mw的發(fā)射功率應(yīng)傳輸10m左右,不能按比例減到只有1m。傳播距離與一般家居面積相差無(wú)幾。為了實(shí)用方便起見(jiàn),對(duì)藍(lán)牙芯片的基本要求有:1) 在10m范圍內(nèi)實(shí)現(xiàn)一點(diǎn)對(duì)多點(diǎn)的通信,一個(gè)藍(lán)牙芯片最多時(shí)可同時(shí)與7個(gè)相同芯片實(shí)現(xiàn)無(wú)線通信;2) 藍(lán)牙數(shù)據(jù)傳
8、輸速率有效值應(yīng)達(dá)到每條信道721位/秒,是普通電話線的13倍左右,最高1m位/秒。3) 使用頻段2.42.4835ghz,這一頻段屬工業(yè)和醫(yī)療的自由頻段,無(wú)需申請(qǐng)無(wú)線電波使用許可證,方便在全世界推廣使用;4) 要求成本低廉,價(jià)格與所取代的電纜線基本持平,例如批量生產(chǎn)的藍(lán)牙芯片產(chǎn)品,成本盡量控制在5美元左右。近期藍(lán)牙的主要目標(biāo)是取代各種電纜連接,通過(guò)統(tǒng)一標(biāo)準(zhǔn)的無(wú)線鏈路網(wǎng)將數(shù)字設(shè)備連成一個(gè)密不可分的整體,方便靈活、低成本、低功耗,像移動(dòng)通信那樣傳輸語(yǔ)音,像因特網(wǎng)那樣傳輸信息。長(zhǎng)遠(yuǎn)藍(lán)牙的主要目標(biāo)是占領(lǐng)家用和商用的近距離數(shù)據(jù)傳輸市場(chǎng)。2.3. 藍(lán)牙協(xié)議棧體系結(jié)構(gòu) 藍(lán)牙技術(shù)規(guī)范是由藍(lán)牙特別興趣小組(si
9、g)制定的,其可分為核心(core)和協(xié)議子集(profile)兩部分。核心部分規(guī)定了射頻、基帶、連接管理、服務(wù)發(fā)現(xiàn)、傳輸層以及不同通信協(xié)議之間的協(xié)調(diào)工作等部分。協(xié)議子集部分規(guī)定了不同藍(lán)牙應(yīng)用所需的協(xié)議和進(jìn)程。藍(lán)牙規(guī)范的協(xié)議采用分層結(jié)構(gòu)。分別完成數(shù)據(jù)流過(guò)濾和傳輸、跳頻、數(shù)據(jù)幀傳輸、連接建立和釋放、鏈路控制、數(shù)據(jù)拆裝、服務(wù)質(zhì)量、協(xié)議復(fù)用和分用等功能。設(shè)計(jì)協(xié)議的主要原則是盡可能利用現(xiàn)有的各種高層協(xié)議,保證現(xiàn)有協(xié)議與藍(lán)牙技術(shù)的兼容性以及各種應(yīng)用之間的互通性,充分利用兼容藍(lán)牙技術(shù)規(guī)范的軟硬件系統(tǒng)。但是值得注意的是,所有高層協(xié)議都要使用藍(lán)牙技術(shù)規(guī)范中的數(shù)據(jù)鏈路層和物理層。藍(lán)牙協(xié)議棧中的協(xié)議根據(jù)其用途的不
10、同可分為四層:核心協(xié)議層:baseband、lmp、l2cap、sdp;電纜替代協(xié)議層:rfcomm;電話控制協(xié)議層:tcs bin、at命令集:可采用的其他協(xié)議層:ppp、tcp/ip、obex、wap、vcard、vcal、wae。其中電纜替代協(xié)議層、電話控制協(xié)議層和可采用的其它協(xié)議層可歸為應(yīng)用專(zhuān)用(application specific)協(xié)議。在藍(lán)牙協(xié)議棧中,應(yīng)用專(zhuān)業(yè)協(xié)議可以加在rfcomm之上,也可以直接加在l2cap之上。除了上面的協(xié)議層外,在藍(lán)牙協(xié)議棧中,還定義一個(gè)主機(jī)控制接口(hci)和音頻接口。hci提供到基帶控制器、鏈路管理器、訪問(wèn)硬件狀態(tài)和控制寄存器的命令接口。它介于軟硬
11、件之間,一般以固件的形式出現(xiàn)。上層協(xié)議提供調(diào)用lmp中的命令,獲取所需的信息。hci位于l2cap的下層,但hci也可以位于l2cap的上層。audio與基帶直接相連,可以在一個(gè)或多個(gè)藍(lán)牙設(shè)備之間傳遞數(shù)據(jù)。2.3.1. 核心協(xié)議圖 1 l2cap功能和作用示意圖1) 基帶協(xié)議基帶和鏈路管理協(xié)議確保在微微網(wǎng)中的藍(lán)牙設(shè)備間建立物理射頻鏈接。藍(lán)牙的射頻系統(tǒng)可提供兩種物理鏈接方式:同步面向連接 (sco)和異步無(wú)連接 (acl),而且在同一射頻上可實(shí)現(xiàn)多路數(shù)據(jù)傳輸。可使用各種用戶(hù)模式在藍(lán)牙設(shè)備間傳語(yǔ)音,面向連接的語(yǔ)音分組只需經(jīng)過(guò)基帶傳輸。而不到達(dá) l2cap層。語(yǔ)音模式在藍(lán)牙系統(tǒng)中相對(duì)簡(jiǎn)單,只需開(kāi)通語(yǔ)
12、音連接,就可傳送語(yǔ)音。 2) 鏈路管理協(xié)議 (lmp) lmp負(fù)責(zé)在藍(lán)牙設(shè)備間實(shí)現(xiàn)鏈路連接和控制。通過(guò)鏈接的建立、交換、檢測(cè)以及加密、協(xié)商基帶數(shù)據(jù)包的大小等手段確保鏈路的安全。此外,lmp還控制著藍(lán)牙射頻設(shè)備的電源模式和工作周期,以及微微網(wǎng)中藍(lán)牙設(shè)備間的連接狀態(tài) 。 3) 邏輯鏈路控制和應(yīng)用協(xié)議 (l2cap) l2cap在基帶協(xié)議之上,處在數(shù)據(jù)鏈路層,可為上層協(xié)議提供面向鏈接和無(wú)鏈接的數(shù)據(jù)服務(wù)它與lmp平行工作,當(dāng)數(shù)據(jù)不經(jīng)過(guò) lmp時(shí)。l2cap可為上層提供服務(wù)。l2cap允許上層協(xié)義傳送和接收長(zhǎng)度為64kb的l2cap數(shù)據(jù)包,并支持多路復(fù)用技術(shù)、包的分割與重組技術(shù)以及群提取技術(shù)。 l2ca
13、p和lmp共同實(shí)現(xiàn) osi的數(shù)據(jù)鏈路層的功能。l2cap的功能和作用可用圖 1來(lái)說(shuō)明。用戶(hù)和服務(wù)器分別表示了請(qǐng)求服務(wù)的發(fā)起者和接受者。應(yīng)用級(jí)的用戶(hù)必須既能發(fā)起請(qǐng)求又能接受請(qǐng)求,兩個(gè)垂直層之間的接口利用低層的前綴來(lái)向高層提供服務(wù),如 l2ca,兩個(gè)同層之間的接口利用協(xié)議的前綴來(lái)提供服務(wù),如 l2cap。 4) 服務(wù)發(fā)現(xiàn)協(xié)議(sdp) sdp是藍(lán)牙協(xié)議棧中至關(guān)重要的部分,它是所有用戶(hù)模式的基礎(chǔ)。sdp可根據(jù)用戶(hù)的需求發(fā)現(xiàn)相應(yīng)的服務(wù)及提供這些服務(wù)的設(shè)備,同時(shí)可給出服務(wù)和設(shè)備的列表。sdp支持三種查詢(xún)方式:按服務(wù)類(lèi)型查詢(xún)、按服務(wù)屬性查詢(xún)和服務(wù)瀏覽。2.3.2. 電纜替代協(xié)議(rfcomm)rfcomm
14、是一種簡(jiǎn)單傳輸協(xié)議,位于l2cap層之上,它在藍(lán)牙基帶協(xié)議上仿真rs-232的控制和數(shù)據(jù)信號(hào),為使用串行線傳輸機(jī)制的上層應(yīng)用協(xié)議(如obex協(xié)議)提供支持。rfcomm可在兩個(gè)藍(lán)牙設(shè)備間同時(shí)支持60路鏈接。該協(xié)議是由sig在gsm ts07.10規(guī)范基礎(chǔ)上開(kāi)發(fā)而成的。2.3.3. 電話控制協(xié)議1) 二進(jìn)制電話控制協(xié)議tcs binsig在itu-t q.931的基礎(chǔ)上開(kāi)發(fā)了一組面向比特流的協(xié)議tcs bin(telephony control protocol specification binary)。該協(xié)議定義了在藍(lán)牙設(shè)備間建立語(yǔ)音和數(shù)據(jù)時(shí)傳輸所需的呼叫控制信號(hào)。tcs的主要功能有呼叫控制
15、(call control)、設(shè)備群管理(group management)等。2) at命令集at-commandsat-commands是一套可在多用戶(hù)模式下用于控制移動(dòng)電話和調(diào)制解調(diào)的命令。它是由sig根據(jù)itu-tv.250建立和gsm ts07.70定義而來(lái)的。2.3.4. 可采用的其它協(xié)議1) 點(diǎn)對(duì)點(diǎn)協(xié)議 ppp ppp是由ietf規(guī)定的點(diǎn)對(duì)點(diǎn)協(xié)議(point-to-point protocol)。在藍(lán)牙技術(shù)中,ppp運(yùn)行于rfcomm之上,用于實(shí)現(xiàn)點(diǎn)到點(diǎn)的連接。2) tcp/ip協(xié)議tcp/ip由ietf制定,作為現(xiàn)在應(yīng)用最廣的協(xié)議族,tcp/ip協(xié)議棧被廣泛地應(yīng)用于因特網(wǎng)通信中
16、。在藍(lán)牙設(shè)備中使用這些協(xié)議是為了和與因特網(wǎng)相連接的設(shè)備進(jìn)行通信。3) 無(wú)線應(yīng)用協(xié)議(wap)wap是由wap論壇制定的一種工作在各種廣域無(wú)線網(wǎng)上的無(wú)線協(xié)議規(guī)范,其目的是將因特網(wǎng)和電話業(yè)務(wù)引入數(shù)字蜂窩電話和其它無(wú)線終端上。選用wap,可以充分利用為無(wú)線應(yīng)用環(huán)境(wae)開(kāi)發(fā)的高層應(yīng)用軟件2。2.4. j2mej2me作為java技術(shù)的一個(gè)組成部分,它與j2se,j2ee并稱(chēng),根據(jù)sun的定義:j2me是一種高度優(yōu)化的java運(yùn)行環(huán)境,主要針對(duì)消費(fèi)類(lèi)電子設(shè)備的,例如:蜂窩電話和可視電話、數(shù)字機(jī)頂盒、汽車(chē)導(dǎo)航系統(tǒng)等。j2me技術(shù)在1999年的javaonedevelopconference大會(huì)上正式
17、推出,它將java語(yǔ)言與平臺(tái)無(wú)關(guān)的特性移植到小型電子設(shè)備上,允許移動(dòng)無(wú)線設(shè)備之間共享應(yīng)用程序3。j2m e與 j2se和 j2ee 相比, j2me總體的運(yùn)行環(huán)境和目標(biāo)更加多樣化,但其中每一種產(chǎn)品的用途卻更為單一,而且資源限制也更加嚴(yán)格。為了在達(dá)到標(biāo)準(zhǔn)化和兼容性的同時(shí)盡量滿(mǎn)足不同方面的需求,j2me的架構(gòu)分為 con figuration, profile和 optional packages。它們的組合取舍形成了具體的運(yùn)行環(huán)境。2.5. obex協(xié)議2.5.1. obex簡(jiǎn)介obex全稱(chēng)為object exchange,中文對(duì)象交換,所以稱(chēng)之為對(duì)象交換協(xié)議。它在此軟件當(dāng)中有著核心地位,文件傳
18、輸和irmc同步都會(huì)使用到它。obex協(xié)議構(gòu)建在irda架構(gòu)的上層。obex協(xié)議通過(guò)簡(jiǎn)單的使用“put”和“get”命令實(shí)現(xiàn)在不同的設(shè)備、不同的平臺(tái)之間方便、高效的交換信息。支持的設(shè)備廣泛,例如pc,pda,電話,攝像頭,自動(dòng)答錄機(jī),計(jì)算器,數(shù)據(jù)采集器,手表等等。obex協(xié)議定義了一種柔性的概念objects。也即是對(duì)象。這些對(duì)象可以包括文件,診斷信息,電子商務(wù)卡片,銀行的存款等等。objects在這里沒(méi)有高級(jí)的技術(shù)含義,而是視你的應(yīng)用而定。obex協(xié)議小到可作“命令和控制”功能,例如對(duì)電視機(jī),錄像機(jī)等的操作。大到可以做很復(fù)雜的操作,例如數(shù)據(jù)庫(kù)的事務(wù)處理和同步。obex能夠具有以下幾個(gè)特點(diǎn):1
19、. 友好的應(yīng)用可實(shí)現(xiàn)快速開(kāi)發(fā)。2. 緊縮可用在資源有限的小型設(shè)備上。3. 跨平臺(tái)。4. 柔性的數(shù)據(jù)支持。5. 方便的作為其他internet傳輸協(xié)議的上層協(xié)議。6. 可擴(kuò)展性提供了對(duì)未來(lái)需求的擴(kuò)充支持而不影響已存在的實(shí)現(xiàn)。例如可擴(kuò)展安全,數(shù)據(jù)壓縮等。7. 可測(cè)試可調(diào)試。2.5.2. obex對(duì)象模型. 關(guān)于headers對(duì)象模型回答了對(duì)象是如何在obex協(xié)議描述的。這個(gè)模型必須包括被傳輸?shù)膶?duì)象和對(duì)對(duì)象的描述。為了做到這點(diǎn),obex定義了headers的概念。一個(gè)header反映了對(duì)象的一個(gè)方面,例如名字、長(zhǎng)度、描述文字或者對(duì)象本身。例如,一個(gè)文件對(duì)象demo.txt會(huì)包含它的名字
20、,一個(gè)類(lèi)型標(biāo)示為“text”,長(zhǎng)度和文件本身。headers的構(gòu)成headers簡(jiǎn)單地由和組成,簡(jiǎn)稱(chēng)為和。hi由一個(gè)字節(jié)組成,指出了header包含的內(nèi)容以及它的格式。hv包含了一個(gè)或者多個(gè)字節(jié),其結(jié)構(gòu)由hi所決定。所有的header都是可選的,取決于設(shè)備的類(lèi)型和事務(wù)的種類(lèi)。你可以使用所有的header,或者一些,或者沒(méi)有。id可以使header可解析以及與傳輸順序無(wú)關(guān),也可以使不支持的header被忽略掉。. 關(guān)于常用header的更詳盡的解釋1. namename是一個(gè)用來(lái)描述對(duì)象名稱(chēng)的header,由以null(0x00)結(jié)尾的unicode字符串組成。例如:demo.tx
21、t2. lengthlength描述了對(duì)象的大小,由4個(gè)字節(jié)組成。如果length事先知道,這個(gè)header應(yīng)該被用到。這樣可以讓接受者迅速的知道需要分配多少空間,可使處理更為迅速。但這也不是必須的,有些情況下長(zhǎng)度無(wú)法確認(rèn),但設(shè)備可以通過(guò)end-body header知道什么時(shí)候結(jié)束。3. timetime描述了對(duì)象的最后修改的時(shí)間。使用iso8601格式。本地時(shí)間格式:yyyymmddthhmmssutc時(shí)間格式:yyyymmddthhmmssz格式中的t可以方便的區(qū)分日期和時(shí)間。utc時(shí)間使用z作為標(biāo)記。建議使用utc時(shí)間。4. body、end-of-bodybody header由hi
22、、一個(gè)2byte長(zhǎng)度的描述和整個(gè)的對(duì)象本身。end-of-body組成和body組成一樣,但標(biāo)識(shí)了這是對(duì)象的最后一部分。如果對(duì)象本來(lái)就很小,就直接使用end-of-body。. 關(guān)于請(qǐng)求(request)和回應(yīng)(response)obex使用request和response作為最基本的操作。請(qǐng)求的每個(gè)request必然有一個(gè)response,否則可認(rèn)為request失敗。request由一個(gè)或多個(gè)的packet(包)組成,每個(gè)包的結(jié)構(gòu)如下表1表格 1 request數(shù)據(jù)包結(jié)構(gòu)byte 0byte 1,2byte 3 to n操作碼(opcode)packet length(包長(zhǎng)度
23、)headers或請(qǐng)求信息由于每個(gè)request可能有多個(gè)packet,opcode的最高位稱(chēng)為final bit。如果被設(shè)置為1,那么說(shuō)明這是request的最后一個(gè)packet。例如:當(dāng)用put操作發(fā)送一個(gè)大文件時(shí),會(huì)有幾個(gè)packet作為一個(gè)request。那么只有最后一個(gè)packet的finalbit設(shè)置為1。response也由一個(gè)或多個(gè)packet組成,每個(gè)包的結(jié)構(gòu)如下表表格 2 response數(shù)據(jù)包結(jié)構(gòu)byte 0byte 1,2byte 3 to nresponse code(返回值)response length(回應(yīng)長(zhǎng)度)responsedata回應(yīng)的數(shù)據(jù)同樣的respo
24、nsecode的最高位也叫做finalbit。responsedata可能包含對(duì)象和header,或者其它信息。下表列出了了常見(jiàn)的opcode和responsecode。表格 3 opcodeopcode(w/high bit set)定義意義0x80 *connect連接0x81 *disconnect斷開(kāi)連接0x02(0x82)put發(fā)送一個(gè)對(duì)象0x03(0x83)get取得一個(gè)對(duì)象0x04(0x84)reserved保留的0x85 *setpath設(shè)置路徑0xff *abort取消當(dāng)前的操作0x06到0x0freserved作為擴(kuò)展保留0x10到0x1fuser definable用戶(hù)自
25、定義的*總是設(shè)置finalbit 表格 4 responsecoderesponsecode定義0x10(0x90)continue(繼續(xù))0x20(0xa0)ok,success0x40(0xc0)bad request(服務(wù)端不明白request)0x41(0xc1)unauthorized(未授權(quán)的)0x43(0xc3)fobidden(禁止服務(wù)器明白request,但拒絕)0x44(0xc4)not found(未找到)2.6. 拓?fù)浣Y(jié)構(gòu)藍(lán)牙支持點(diǎn)對(duì)點(diǎn)和一點(diǎn)對(duì)多點(diǎn)的通信。藍(lán)牙最基本的網(wǎng)絡(luò)組成是微微網(wǎng)。而微微網(wǎng)實(shí)際上是一種個(gè)人區(qū)域網(wǎng)。這是一種以個(gè)人區(qū)域(即辦公室區(qū)域和家庭區(qū)域)為應(yīng)用環(huán)境
26、的網(wǎng)絡(luò)建構(gòu)。這里需要指出的是微微網(wǎng)并不能夠代替局域網(wǎng),它只是用來(lái)代替或簡(jiǎn)化個(gè)人區(qū)域的電纜連接。微微網(wǎng)由主設(shè)備單元和從設(shè)備單元兩種設(shè)備構(gòu)成。主設(shè)備單元負(fù)責(zé)提供時(shí)鐘同步信號(hào)和跳頻序列,而從設(shè)備單元一般是受控同步的設(shè)備單元,并接受主設(shè)備單元的控制。在同一微微網(wǎng)中,所有設(shè)備單元均采用同一跳頻序列。每個(gè)從設(shè)備單元的起始頻率和占用信道由主設(shè)備單元控制。一個(gè)微微網(wǎng)中,一般只有一個(gè)主設(shè)備單元,而從設(shè)備單元目前最多可以有7個(gè)。當(dāng)主設(shè)備單元為一個(gè),從設(shè)備單元也是一個(gè)的時(shí)候,這種操作方式是單從方式,如圖 2所示。圖 2單從方式網(wǎng)絡(luò)拓?fù)洚?dāng)主設(shè)備單元是一個(gè),從設(shè)備單元是多個(gè)的時(shí)候,這種操作方式是多從方式,如圖3所示例如
27、,辦公室的 pc可以是一個(gè)主設(shè)備單元,而無(wú)線鍵盤(pán)、無(wú)線鼠標(biāo)和無(wú)線打印機(jī)可以充當(dāng)從設(shè)備單元的角色。圖 3單從方式網(wǎng)絡(luò)拓?fù)洳煌奈⑽⒕W(wǎng)之間可以互相連接。藍(lán)牙規(guī)范指出,幾個(gè)相互獨(dú)立并不同步的、以特定方式連接起來(lái)的微微網(wǎng)構(gòu)成了分布式網(wǎng)絡(luò),又稱(chēng)作微微互連網(wǎng),如圖3所示。相鄰或相近的不同的微微網(wǎng)采用不同的跳頻序列以避免干擾。在圖4中,一個(gè)微微網(wǎng)中的主設(shè)備單元同時(shí)也可以做為另一個(gè)微微網(wǎng)中的從設(shè)備單元,我們把這種設(shè)備單元叫做復(fù)合設(shè)備單元4。圖 4微微網(wǎng)互連組成分布式網(wǎng)絡(luò)3. 總體分析與設(shè)計(jì)一個(gè)藍(lán)牙的應(yīng)用包含一個(gè)服務(wù)端和一個(gè)客戶(hù)端。商家的廣告平臺(tái)為服務(wù)器端,客戶(hù)的手機(jī)為客戶(hù)端5。服務(wù)器端向客戶(hù)端發(fā)送廣告的圖片,
28、視頻等。服務(wù)器端:一個(gè)為客戶(hù)端提供服務(wù)的服務(wù)器。它對(duì)客戶(hù)端進(jìn)行注冊(cè),對(duì)它們進(jìn)行有效廣播。然后等待連接,收到有請(qǐng)求時(shí)接受他們并為它們提供服務(wù)。最后,當(dāng)不再需要服務(wù)時(shí),應(yīng)用程序會(huì)將服務(wù)器端和客戶(hù)端的連接移除。服務(wù)器端的工作流程如下(具體系統(tǒng)截圖見(jiàn)下圖5,6):1. 啟動(dòng)2. 偵聽(tīng)客戶(hù)端服務(wù)請(qǐng)求,若有客戶(hù)請(qǐng)求連接,建立連接3. 列出當(dāng)前共享文件列表4. 偵聽(tīng)客戶(hù)端選擇要接收的文件5. 根據(jù)客戶(hù)的選擇發(fā)送相應(yīng)的文件數(shù)據(jù)6. 完成當(dāng)前文件數(shù)據(jù)發(fā)送后,偵聽(tīng)下一個(gè)文件數(shù)據(jù)的請(qǐng)求7. 當(dāng)前用戶(hù)的文件數(shù)據(jù)發(fā)送后,返回到2圖 5服務(wù)器端發(fā)送數(shù)據(jù)文件圖 6 服務(wù)器端和客戶(hù)端進(jìn)行連接核心代碼:1) 服務(wù)器端和客戶(hù)端建
29、立連接 private void connect() throws ioexception string url = irdaobex:/discover.0210;ias=imageexchange;/*通過(guò)指定的url和客戶(hù)端建立連接*/ session = (clientsession)connector.open(url);/*建立連接后對(duì)方返回的頭部信息*/ headerset response = session.connect(null); int responsecode = response.getresponsecode(); /*正常情況返回*/*若出現(xiàn)異常,直接向上層拋
30、出異常*/ if (responsecode != responsecodes.obex_http_ok) throw new ioexception(); 2) 釋放連接private void closeall() if (baos != null) try /*釋放傳輸?shù)奈募?shù)據(jù)*/ baos.close(); catch (ioexception ioe) baos = null; /*釋放obex流outputstream*/ if (outputstream != null) try outputstream.close(); catch (ioexception ioe) out
31、putstream = null; /*釋放operation*/ if (operation != null) try operation.close(); catch (ioexception ioe) operation = null; /*釋放服務(wù)器端和客戶(hù)端之間的連接*/ if (session != null) try session.disconnect(null); catch (ioexception ioe) try session.close(); catch (ioexception ioe) session = null; 3) 加載向客戶(hù)端傳輸文件數(shù)據(jù)/* load
32、 image data to array */ private void loadimagedata(string imagename) throws ioexception /*讀取本地文件夾下指定的文件*/ imagesource = getclass().getresourceasstream(imagename); /* 建立buff數(shù)組,buff大小設(shè)置為1024*/ byte buff = new byte1024;/*建立byte型數(shù)組緩沖區(qū)*/ baos = new bytearrayoutputstream(1024); /*批量將imagesource的數(shù)據(jù)讀取到buff中
33、*/ while (true) / check stop signal if (stop) throw new ioexception(); int length = imagesource.read(buff); if (length = -1) break; /*將buff中的數(shù)據(jù)寫(xiě)入緩沖區(qū)*/ baos.write(buff, 0, length); /*將緩沖區(qū)存入一個(gè)更大的byte數(shù)組類(lèi)型變量imagedata中*/ imagedata = baos.tobytearray(); 4) 上傳要傳輸?shù)奈募?* uploads image to receiver */ private v
34、oid uploadimage(string imagename) throws ioexception int position = 0; headerset headers = session.createheaderset();/*將要傳輸?shù)奈募麑?xiě)入obex的頭部*/ headers.setheader(headerset.name, imagename);/*將要傳輸文件大小寫(xiě)入obex的頭部*/ headers.setheader(headerset.length, new long(imagedata.length); operation = session.put(header
35、s); outputstream = operation.openoutputstream();/*批量將imagedata中的文件數(shù)據(jù)發(fā)送給客戶(hù)端*/ while (position != imagedata.length) outputstream outputstream = this.outputstream; int sendlength = (imagedata.length - position) 256) ? 256 : (imagedata.length - position); if (outputstream = null) throw new ioexception()
36、; outputstream.write(imagedata, position, sendlength); position += sendlength; /*發(fā)送完后,關(guān)閉outputstream*/ outputstream.close();/*獲取operation*/ int code = operation.getresponsecode();/*若發(fā)送文件數(shù)據(jù)過(guò)程中發(fā)生錯(cuò)誤,直接拋出異常*/ if (code != responsecodes.obex_http_ok) throw new ioexception(); 客戶(hù)端:一個(gè)客戶(hù)對(duì)遠(yuǎn)端服務(wù)進(jìn)行消費(fèi)。首先它要發(fā)現(xiàn)所有附近的設(shè)
37、備,然后對(duì)每一個(gè)發(fā)現(xiàn)的設(shè)備搜索它感興趣的服務(wù)。客戶(hù)端的工作流程如下(具體系統(tǒng)截圖見(jiàn)下圖7,8,9):1. 啟動(dòng)2. 搜索服務(wù)服務(wù)端設(shè)備3. 若沒(méi)有可用的設(shè)備,那么就終止4. 若有可用的設(shè)備,就開(kāi)始搜索服務(wù)器提供的服務(wù)5. 若沒(méi)有可用的服務(wù),那么就終止6. 若有可用的服務(wù),就獲得服務(wù)列表7. 選擇相應(yīng)服務(wù)8. 啟動(dòng)相應(yīng)線程偵聽(tīng)客戶(hù)動(dòng)作,若客戶(hù)選擇此次操作結(jié)束,則返回到69. 獲取客戶(hù)的操作,將操作指令發(fā)送給服務(wù)器端圖 7 客戶(hù)端接收數(shù)據(jù)文件圖 8 客戶(hù)端與服務(wù)器建立連接,準(zhǔn)備接收數(shù)據(jù)圖 9 客戶(hù)端下載并顯示服務(wù)器發(fā)送的數(shù)據(jù)文件核心代碼:1) 客戶(hù)端和服務(wù)器端建立連接public void run
38、() try / synchronized to prevent loss of opened session synchronized (this) /*通過(guò)指定的url和服務(wù)器端建立連接*/ string url = irdaobex:/localhost.0010;ias=imageexchange; session = (sessionnotifier)connector.open(url); current_state = opened; while (current_state != closed) session.acceptandopen(handler); preventov
39、erloading(); catch (ioexception ioe) /*若連接過(guò)程中發(fā)生中斷,拋出異常*/ synchronized (this) if (current_state != closed) ioe.printstacktrace(); synchronized (this) if (current_state != closed) current_state = closed; /*關(guān)閉連接*/ closeall(true);2) 接收文件 private int imagereceive(operation operation) headerset headers =
40、null; string imagename = null; int imagelength = 0; int responsecode; try /*開(kāi)始接收數(shù)據(jù)文件*/ startsynchreceiving(operation); / download information about image/*讀取發(fā)送數(shù)據(jù)的頭部*/ headers = operation.getreceivedheaders();/*從頭部讀取傳輸?shù)奈募?/ imagename = (string)headers.getheader(headerset.name);/*從頭部讀取傳輸?shù)奈募L(zhǎng)度*/ image
41、length = (int)(long)headers.getheader(headerset.length).longvalue(); /*界面向手機(jī)用戶(hù)詢(xún)問(wèn)是否允許接收文件*/ if (gui.askpermission(imagename, imagelength) /* 下載并顯示數(shù)據(jù)文件*/ gui.showimage(downloadimage(imagelength); responsecode = responsecodes.obex_http_ok; else /*若用戶(hù)不接收文件,則此次傳輸文件被禁止*/ responsecode = responsecodes.obex_
42、http_forbidden; catch (ioexception ioe) /*傳輸中發(fā)送錯(cuò)誤,進(jìn)行錯(cuò)誤處理*/ if (current_state = stoped) gui.showwaiting(); closeall(false); responsecode = responsecodes.obex_http_reset; else if (current_state = connected) gui.cannotconnectmessage(); closeall(false); responsecode = responsecodes.obex_http_internal_er
43、ror; else if (current_state = started) gui.stopmessage(); gui.showwaiting(); closeall(false); responsecode = responsecodes.obex_http_internal_error; else / closed, opened ?, none ? synchronized (this) current_state = closed; closeall(true); responsecode = responsecodes.obex_http_internal_error; /*停止
44、接收數(shù)據(jù)文件*/ stopsynchreceiving(); return responsecode;3) 下載數(shù)據(jù)文件: /* download image. */ private byte downloadimage(int imagelength) throws ioexception byte imagedata = new byteimagelength; int position = 0; int length = 0;/*檢測(cè)當(dāng)前服務(wù)器端和客戶(hù)端的狀態(tài),若為斷開(kāi)連接,則直接在此拋出異常*/ checkstopsignal(); /*顯示發(fā)送傳輸數(shù)據(jù)的進(jìn)度條*/gui.showpr
45、ogress(imagelength); synchronized (this) current_state = started; inputstream = operation.openinputstream(); while (position imagelength) inputstream inputstream = this.inputstream; if (inputstream = null) throw new ioexception(); checkstopsignal();/*批量傳輸數(shù)據(jù)*/ if (position (imagelength - 256) length
46、= inputstream.read(imagedata, position, 256); else length = inputstream.read(imagedata, position, imagelength - position); if (length 0) throw new ioexception(); position += length; gui.updateprogress(position); synchronized (this) current_state = closed; closeall(true); return imagedata; 4. 結(jié)論obex
47、協(xié)議是一種簡(jiǎn)單、高效的高層應(yīng)用協(xié)議。隨著手機(jī)和各種便攜式產(chǎn)品得到廣泛的應(yīng)用,可以通過(guò) obex 協(xié)議的文件傳輸,可實(shí)現(xiàn)多種設(shè)備,如pc 機(jī)、pda、筆記本、移動(dòng)電話的文件共享,應(yīng)用范圍相當(dāng)廣泛。本文通過(guò)深入了解obex 協(xié)議,并在j2me開(kāi)發(fā)平臺(tái)上的開(kāi)發(fā)實(shí)踐,給出了基于 obex 協(xié)議的文件傳輸?shù)膶?shí)現(xiàn)方法。以上系統(tǒng)在j2me的模擬器上調(diào)式通過(guò),但還沒(méi)有在多個(gè)真實(shí)的移動(dòng)電話的環(huán)境中(例如:nokia,motorola,sony ericsson等)進(jìn)行測(cè)試,下一步將進(jìn)行多終端情況下的測(cè)試,以此來(lái)了解系統(tǒng)的實(shí)用性。5. 參考文獻(xiàn):1 金純,許光辰,孫睿藍(lán)牙技術(shù)北京:電子工業(yè)出版社,2002.2 鄒
48、俊,馬家志,胡明.藍(lán)牙協(xié)議的體系結(jié)構(gòu)及其應(yīng)用j.移動(dòng)通信,2002(4):40-43.3 廖永剛, 余冬梅, 張秋余. j2me架構(gòu)與安全機(jī)制的研究j.計(jì)算機(jī)工程與設(shè)計(jì), 2006, 27 (4): 575 - 577.4 井雅,徐曉東,呂志虎.藍(lán)牙協(xié)議模型及應(yīng)用j.通信技術(shù).2001(5):34-36,50.5 王昆.基于obex的文件傳輸在手機(jī)平臺(tái)上的應(yīng)用j.計(jì)算機(jī)工程與設(shè)計(jì).2006,27(24):48034805. 6. 附錄obeximagesend.java, obeximagereceiver.java為本系統(tǒng)中的核心代碼,承擔(dān)了服務(wù)器端和客戶(hù)端的功能,在此列出:obeximagesender.javapackage ex
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025上海二手車(chē)買(mǎi)賣(mài)合同樣本
- 套細(xì)胞淋巴瘤的臨床護(hù)理
- 2025年企業(yè)設(shè)備借款抵押合同專(zhuān)業(yè)版范本
- 2025年人教版小學(xué)數(shù)學(xué)一年級(jí)下冊(cè)期末考試卷(帶答案)
- 白頭粉刺的臨床護(hù)理
- 縮鼻翼的臨床護(hù)理
- 新質(zhì)生產(chǎn)力綠色轉(zhuǎn)型
- 浙江國(guó)企招聘2025浙江省安全生產(chǎn)科學(xué)研究有限公司招聘19人筆試參考題庫(kù)附帶答案詳解
- 2025【合同范本】簡(jiǎn)易勞務(wù)合作協(xié)議模板
- 《2025項(xiàng)目工程物資采購(gòu)合同》
- 國(guó)家衛(wèi)生部《綜合醫(yī)院分級(jí)管理標(biāo)準(zhǔn)》
- DB64++1996-2024+燃煤電廠大氣污染物排放標(biāo)準(zhǔn)
- 初中八年級(jí)數(shù)學(xué)課件-最短路徑-將軍飲馬問(wèn)題
- 信息論與編碼期末考試題(全套)
- 醫(yī)院醫(yī)學(xué)倫理審查委員會(huì)章程
- 廢棄物管理制度范本
- 房地產(chǎn)銷(xiāo)售價(jià)格優(yōu)惠申請(qǐng)表-
- 綠化自動(dòng)滴灌系統(tǒng)施工方案
- 處理突發(fā)事件流程圖
- 2023年梅毒診療指南
- 醫(yī)療衛(wèi)生系統(tǒng)招聘《醫(yī)學(xué)基礎(chǔ)知識(shí)》備考題庫(kù)資料寶典(核心題版)
評(píng)論
0/150
提交評(píng)論