亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種基于Android的無線局域網(wǎng)通信方法與流程

文檔序號:12478081閱讀:1445來源:國知局
一種基于Android的無線局域網(wǎng)通信方法與流程

本發(fā)明屬于網(wǎng)絡(luò)技術(shù)領(lǐng)域,尤其涉及一種基于Android的無線局域網(wǎng)通信方法。



背景技術(shù):

在生產(chǎn)與生活當(dāng)中,人與人之間離不開溝通與交流,隨著科學(xué)的發(fā)展、技術(shù)的進(jìn)步人們的溝通方式也在發(fā)生著潛移默化的改變。隨著網(wǎng)絡(luò)技術(shù)和軟件技術(shù)的不斷進(jìn)步,越來越多的人通過社交網(wǎng)絡(luò)來結(jié)識新的朋友,代表軟件有:MSN、QQ、微信、易信等,但他們只是對傳統(tǒng)社交網(wǎng)絡(luò)的拓展。當(dāng)今網(wǎng)絡(luò)技術(shù)逐步朝著“高速”與“無線”的趨勢過渡發(fā)展,無線網(wǎng)絡(luò)以其獨(dú)有的優(yōu)勢得到企業(yè)與個人的青睞。

無線網(wǎng)絡(luò)包含有:WLAN(無線局域網(wǎng))、無線個人區(qū)域網(wǎng)、無線廣域網(wǎng)和固定接入無線技術(shù)。其中,無線局域網(wǎng)發(fā)展最為迅速,產(chǎn)品也日漸成熟,它以IEEE 802.11b標(biāo)準(zhǔn)作為傳輸協(xié)議,支持最大的傳輸速率達(dá)到11Mbit/s。隨后于1999年成立的WiFi聯(lián)盟對無線局域網(wǎng)的發(fā)展提供可靠的保障。

相較于有線局域網(wǎng),無線局域網(wǎng)具有以下優(yōu)點(diǎn):

移動性靈活:WLAN提供了對終端移動性的支持,去掉了布線的束縛,終端可在AP覆蓋范圍內(nèi)任意移動,并且在保持網(wǎng)絡(luò)連接不中斷的情況下可在不同AP間移動切換。

傳輸速率高:WLAN目前的傳輸速率可達(dá)11Mbit/s,通過應(yīng)用OFDM技術(shù)的WLAN,可高達(dá)54Mbit/s,遠(yuǎn)遠(yuǎn)超過有線網(wǎng)絡(luò)的傳輸速率。

資源共享:在不超過規(guī)定容量要求的基礎(chǔ)上,多個終端可共用一個AP。

易于擴(kuò)展:因?yàn)闆]有布線的局限,用戶可隨意地增添、重新建立工作站。

基于網(wǎng)絡(luò)通信的便捷性與經(jīng)濟(jì)性的需求,通過移動終端在無線局域網(wǎng)實(shí)現(xiàn)通信具有其存在的價值與意義。一方面,局域網(wǎng)內(nèi)部進(jìn)行通信,避免了同外網(wǎng)的數(shù)據(jù)交互,在安全性方面提供了很大的保障;另一方面,無線局域網(wǎng)以其靈活性、共享性、擴(kuò)展性的優(yōu)勢,給企業(yè)和個人在生產(chǎn)與生活中帶來極大的便利。同時,智能4G手機(jī)和無線網(wǎng)絡(luò)技術(shù)的發(fā)展與制度的健全,移動終端基于無線局域網(wǎng)通信將有更廣闊的發(fā)展前景與應(yīng)用價值。

智能手機(jī)的發(fā)展日新月異,使其對操作系統(tǒng)的性能要求也逐步提高,Android操作系統(tǒng)因其開源免費(fèi)的優(yōu)勢得到眾多開發(fā)者的青睞,廠商可根據(jù)市場的需求自主開發(fā)出對用戶有吸引力的應(yīng)用軟件,例如:QQ、微信、知乎等等。而基于Android操作系統(tǒng)的無線局域網(wǎng)通信軟件的研究與開發(fā),對人們進(jìn)行安全、短距離、低成本、高速率的通信需求將具有很大的用途。

無線局域網(wǎng)的起源最早可追溯到第二次世界大戰(zhàn),該技術(shù)在軍事戰(zhàn)爭方面的應(yīng)用。隨后20世紀(jì)70年代到90年代,以太局域網(wǎng)發(fā)展迅猛,無線局域網(wǎng)因其無需布線、靈活性強(qiáng)的優(yōu)勢得到市場的認(rèn)可。但當(dāng)時的無線局域網(wǎng)產(chǎn)品采用IEEE802.3的標(biāo)準(zhǔn),易受微波噪聲干擾、傳輸速率較低、各廠商產(chǎn)品間互不兼容等劣勢,使其發(fā)展受到很大的限制。1990年11月,美國國際電子電機(jī)學(xué)會成立802.11委員會,開始制定無線局域網(wǎng)標(biāo)準(zhǔn),才進(jìn)一步促進(jìn)無線局域網(wǎng)的高速發(fā)展。迄今已推出多項(xiàng)標(biāo)準(zhǔn),例如:IEEE802.11、IEEEE802.11a、IEEE802.11b、IEEE802.11g等,下面選擇幾項(xiàng)進(jìn)行重點(diǎn)介紹:

IEEE802.11b:該標(biāo)準(zhǔn)是無線局域網(wǎng)標(biāo)準(zhǔn)中最著名、普及率最廣的標(biāo)準(zhǔn)。其載波的頻率為2.4GHz,數(shù)據(jù)傳輸速率為11Mbit/s,傳輸距離為50米至150米。通過該標(biāo)準(zhǔn)推出的產(chǎn)品運(yùn)用于家庭、辦公室、車站、酒店等諸多場合。

IEEE802.11a:該標(biāo)準(zhǔn)采用了與原始標(biāo)準(zhǔn)相同的核心協(xié)議,工作頻段為5.725-5.85GHz,數(shù)據(jù)傳輸速率最大可達(dá)54Mbit/s,傳輸距離為10米至50米,支持語音、數(shù)據(jù)、圖像等眾多業(yè)務(wù)。

IEEE802.11g:該標(biāo)準(zhǔn)頻段與802.11b相同,為2.4GHz,最大傳輸速率可達(dá)54Mbit/s傳輸距離為50米至100米。

IEEE802.11n:該標(biāo)準(zhǔn)是近幾年IEEE推出的新的802.11標(biāo)準(zhǔn),目前仍處于草案階段,傳輸速率預(yù)計(jì)將高達(dá)540Mbit/s。若該標(biāo)準(zhǔn)順利推出,那它將比802.11b快上50倍,而比802.11g快將近10倍,數(shù)據(jù)將可被傳輸?shù)礁h(yuǎn)的距離。

國內(nèi)企業(yè)在無線局域網(wǎng)的應(yīng)用起步相對早些。在國外設(shè)備廠商的技術(shù)支持下,廣州鋼鐵集團(tuán)的各分廠、清華紫光旗下的紫光大廈和藍(lán)潤大廈等諸多地方都已通過無線局域網(wǎng)實(shí)現(xiàn)無線聯(lián)網(wǎng)。于2001年起,國內(nèi)無線局域網(wǎng)的應(yīng)用推廣出現(xiàn)了競爭的勢態(tài),參與市場競爭的運(yùn)營商有中國網(wǎng)通基于802.11b無線協(xié)議推出的“無線伴侶”、中國電信也在基于802.11b協(xié)議推出了“天翼通”等。

以上方案存在的主要局限性在于:

1、無線網(wǎng)絡(luò)接入依賴于網(wǎng)絡(luò)服務(wù)運(yùn)營商(ISP)提供的服務(wù),連接到不同ISP接入點(diǎn)上的終端間進(jìn)行通信時,需跨網(wǎng)進(jìn)行,且訪問控制受到ISP限制。

2、無線網(wǎng)絡(luò)拓?fù)湟蕾囉诮尤朦c(diǎn)(AP)的布置,所有的終端都連接到對應(yīng)的AP上,因此在AP覆蓋范圍外的終端相互間無法通信。

3、無線網(wǎng)絡(luò)的移動性、適用性局限大,通信終端智能在固定假設(shè)的AP基站覆蓋范圍內(nèi)移動,不適用于野外、臨時區(qū)域及其他不具備架設(shè)基站條件的區(qū)域。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明的目的在于提供一種基于Android的無線局域網(wǎng)通信方法,旨在解決目前基于安卓系統(tǒng)搭建的無線局域網(wǎng)內(nèi)的通訊節(jié)點(diǎn)列表獲取、顯示通訊節(jié)點(diǎn)信息、顯示未查看消息數(shù)量、修改個人信息、節(jié)點(diǎn)加入或離開通訊狀態(tài)的改變、接收發(fā)消息等技術(shù)不太完善的問題。

本發(fā)明是這樣實(shí)現(xiàn)的,

一種基于Android的無線局域網(wǎng)通信方法,該基于Android的無線局域網(wǎng)通信方法包括:

基于Android的UDP Socket通信;

實(shí)時發(fā)現(xiàn)有新的節(jié)點(diǎn)加入移動網(wǎng)絡(luò)并更新節(jié)點(diǎn)列表;

有節(jié)點(diǎn)離開時能實(shí)時做出響應(yīng)并告知該網(wǎng)絡(luò)中的用戶,實(shí)現(xiàn)跨網(wǎng)段的通信。

進(jìn)一步,基于Android的UDP Socket通信方法為:

在廣播數(shù)據(jù)包之前,發(fā)送方和接收方分別創(chuàng)建一個Socket對象,并指定DatagramPacket數(shù)據(jù)包存儲要被發(fā)送的數(shù)據(jù),在定義UDP Socket服務(wù)時,對一個固定的端口進(jìn)行監(jiān)聽,在收發(fā)數(shù)據(jù)的過程中,調(diào)用Socket對象的send方法發(fā)送數(shù)據(jù)包,使用receive()方法對發(fā)送數(shù)據(jù)包發(fā)送過來的數(shù)據(jù)包進(jìn)行接收,同時receive()進(jìn)行阻塞;

當(dāng)消息從網(wǎng)絡(luò)中到達(dá)后,消息所包含的數(shù)據(jù)被UDP的receive()方法返回前,數(shù)據(jù)存儲在一個先進(jìn)先出的接收數(shù)據(jù)隊(duì)列中,一個UDP Socket所接受的數(shù)據(jù)存放在相應(yīng)的唯一一個消息隊(duì)列中,每個消息都關(guān)聯(lián)自己源地址信息,每次receive()調(diào)用只返回一條消息,receive()方法中在一個緩存區(qū)消息的長度大小為n,而接收隊(duì)列中的第一條消息的長度大于n,則receive()方法只返回這條消息的前n個字節(jié),超出部分自動放棄且沒有消息提示。

進(jìn)一步,接收方操作步驟為:

A、啟動Socket連接;

B、創(chuàng)建一個multicastSocket對象,并設(shè)定監(jiān)聽端口;將UDP端口編號加入到組播組;

C、創(chuàng)建一個byte數(shù)組進(jìn)行接收,獲得用戶ID號和獲得請求方的ip地址,并接收信息;

D、創(chuàng)建一個空的DatagramPackage對象;

E、使用receive()方法對發(fā)送方所發(fā)送的數(shù)據(jù)進(jìn)行接收,同時進(jìn)行阻塞;

F、解析接收到的數(shù)據(jù)信息;所述數(shù)據(jù)信息包括接收方ID、發(fā)送方ID、用戶的昵稱、用戶的IP地址、接收信息的時間;

G、關(guān)閉Socket連接,離開組播組。

進(jìn)一步,發(fā)送方操作步驟為:

a、啟動Socket連接;

b、創(chuàng)建一個multicastSocket對象,加入到組播組;

c、創(chuàng)建一個InetAddress;

d、將消息轉(zhuǎn)為byte類型;

e、創(chuàng)建一個DatagramPacket對象,并指定其要被發(fā)送到的網(wǎng)絡(luò)中的目的地址以及端口號;

f、調(diào)用multicastSocket對象的send方法發(fā)送數(shù)據(jù);

g、關(guān)閉Socket連接,離開組播組。

進(jìn)一步,實(shí)時發(fā)現(xiàn)有新的節(jié)點(diǎn)加入移動網(wǎng)絡(luò)并更新節(jié)點(diǎn)列表方法包括:

初始化指令緩存、檢測網(wǎng)絡(luò)狀態(tài),獲取本地IP地址、啟動Socket連接、注冊廣播接收器、獲取自身信息、向網(wǎng)絡(luò)發(fā)送心跳包,并注冊自己;

所述初始化指令緩存包括初始化用戶注冊指令緩存、初始化信息發(fā)送指令緩存;

檢測網(wǎng)絡(luò)連接狀況,獲取本地IP地址,其方法為:

首先,設(shè)置用戶上網(wǎng)權(quán)限,允許Internet訪問;

然后,檢測所有的網(wǎng)絡(luò)接口,得到每一個網(wǎng)絡(luò)接口綁定的IP地址;

最后,判斷如果該IP地址是IPv4地址且不是回送IP,則該IP地址就是該網(wǎng)絡(luò)接口的IP。

所述獲得自身相關(guān)信息包括連接標(biāo)志號、昵稱及通訊節(jié)點(diǎn)數(shù)量等,更新注冊命令的用戶數(shù)據(jù)和更新通話命令的用戶數(shù)據(jù);

所述向網(wǎng)絡(luò)發(fā)送心跳包,并注冊自己為定時向?qū)Ψ桨l(fā)送心跳包,告知對方自己仍“在線”,心跳包發(fā)送時間間隔為10秒鐘。

進(jìn)一步,有節(jié)點(diǎn)離開時能實(shí)時做出響應(yīng)并告知該網(wǎng)絡(luò)中的用戶,實(shí)現(xiàn)跨網(wǎng)段的通信方法包括:

向網(wǎng)絡(luò)發(fā)送心跳包,并注冊自己,定時向?qū)Ψ桨l(fā)送心跳包的形式,告知對方自己仍“在線”,心跳包發(fā)送時間間隔為10秒鐘;

檢查用戶列表是否有超時用戶,當(dāng)某個節(jié)點(diǎn)退出移動網(wǎng)絡(luò),所述的某個節(jié)點(diǎn)需要廣播一個remove消息告知網(wǎng)絡(luò)中所述的某個節(jié)點(diǎn)外的節(jié)點(diǎn),所述的某個節(jié)點(diǎn)外的節(jié)點(diǎn)通過廣播接收器收到所述的某個節(jié)點(diǎn)的消息,立即做出響應(yīng),將退出的節(jié)點(diǎn)從所述的某個節(jié)點(diǎn)外的節(jié)點(diǎn)列表中刪除;用戶是否在線檢測時間上限為15秒,若超過15秒未作出響應(yīng)則從列表中清除該用戶;

通知有新用戶加入或退出,當(dāng)一個新的節(jié)點(diǎn)加入移動網(wǎng)絡(luò)時,所述的新的節(jié)點(diǎn)向網(wǎng)絡(luò)中廣播一個HELLO類型的消息,來告訴當(dāng)前網(wǎng)絡(luò)中所述的新的節(jié)點(diǎn)外的節(jié)點(diǎn)自己的加入,當(dāng)所述的新的節(jié)點(diǎn)外的節(jié)點(diǎn)收到所述的新的節(jié)點(diǎn)發(fā)送過來的消息時,將其加入到所述的新的節(jié)點(diǎn)外的節(jié)點(diǎn)列表中,同時回送一個HELLO_ACK類型的消息,讓新加入的節(jié)點(diǎn)知道當(dāng)前網(wǎng)絡(luò)中有已存在的節(jié)點(diǎn),并快速建立起新加入的節(jié)點(diǎn)列表。

進(jìn)一步,基于Android的無線局域網(wǎng)通信方法的基于Android的無線局域網(wǎng)通信系統(tǒng)設(shè)置有表現(xiàn)層、基于UDP協(xié)議的Socke通信模塊、SQLite數(shù)據(jù)庫和Android操作系統(tǒng);

表現(xiàn)層用于提供用戶操作體驗(yàn)的圖形化界面,顯示節(jié)點(diǎn)列表和消息編輯與記錄,應(yīng)用層的圖形化界面設(shè)置有節(jié)點(diǎn)列表層、個人信息設(shè)置層、通信記錄層、

節(jié)點(diǎn)列表層用于顯示當(dāng)前局域網(wǎng)絡(luò)中可進(jìn)行通訊的網(wǎng)絡(luò)節(jié)點(diǎn)列表,以ListView控件來顯示所有的節(jié)點(diǎn)信息,每個ListItem包含的節(jié)點(diǎn)信息設(shè)置有:

IPAdress:用于顯示網(wǎng)絡(luò)中到達(dá)節(jié)點(diǎn)的IP地址;

User ID:用于確認(rèn)用戶的ID,節(jié)點(diǎn)注冊登錄,作為自己在該網(wǎng)絡(luò)中唯一標(biāo)識自己的字符串或者數(shù)字;

getmessagesCountBuId:用于顯示某個用戶發(fā)來信息,而自身未查看接收的消息的數(shù)量統(tǒng)計(jì);通過點(diǎn)擊列表中的一節(jié)點(diǎn),跳轉(zhuǎn)到聊天界面,進(jìn)行信息的編輯發(fā)送與接收查看;

個人信息設(shè)置層用于用戶根據(jù)自身的主觀意愿選擇喜愛的頭像以及昵稱編輯,當(dāng)用戶個人信息設(shè)置成功后,在下次與網(wǎng)絡(luò)中其他用戶聊天通訊中,顯示在聊天界面當(dāng)中;

通信記錄層用于用戶編輯消息和顯示本機(jī)與指定終端間信息往來的詳情記錄,記錄包含的字段內(nèi)容有:消息內(nèi)容、發(fā)送方與接收方的用戶ID、發(fā)送或接收消息的具體時間;并將這些通信記錄保存在SQLite數(shù)據(jù)庫中;

Android操作系統(tǒng):用于負(fù)責(zé)界面組件的API,數(shù)據(jù)發(fā)送API,SQLite數(shù)據(jù)庫操作API,API包括一組核心的包和類模塊、清單文件的XML元素及屬性聲明模塊、各類意圖模塊、資源文件的XML元素和屬性聲明及訪問形式模塊、可被應(yīng)用程序請求的各類授權(quán)模塊以及授權(quán)執(zhí)行模塊;

基于UDP協(xié)議的Socke通信模塊:用于滿足同個WLAN環(huán)境中,同個網(wǎng)段或不同網(wǎng)段間用戶的通信過程,通過Android提供的數(shù)據(jù)包發(fā)送的接口,接受發(fā)送并對數(shù)據(jù)包內(nèi)容處理,達(dá)到節(jié)點(diǎn)間的互發(fā)現(xiàn)與通訊;

SQLite數(shù)據(jù)庫:用于通過Android自帶的SQLite相關(guān)接口進(jìn)行數(shù)據(jù)儲存和處理。

進(jìn)一步,Android操作系統(tǒng)分為四層,由高到低分別為應(yīng)用層、應(yīng)用框架層、系統(tǒng)運(yùn)行庫和linux內(nèi)核層;

應(yīng)用層包括主顯示屏、電話本模塊、聯(lián)系人模塊、時鐘模塊、天氣模塊;電話本模塊、聯(lián)系人模塊、時鐘模塊、天氣模塊均集成在應(yīng)用層集成板上并均與顯示屏連接;

應(yīng)用框架層包括Activity管理器、內(nèi)容提供器、位置管理器、通知管理器、包管理器、資源管理器、電話管理器、視圖系統(tǒng)、窗口管理器;Activity管理器、內(nèi)容提供器、位置管理器、通知管理器、包管理器、資源管理器、電話管理器、視圖系統(tǒng)、窗口管理器均集成在應(yīng)用框架層集成板上;

視圖系統(tǒng)包括按鈕組件、文本框組件、編輯框組件、下拉列表組件、時間選擇器組件;

系統(tǒng)運(yùn)行庫包括Surface Manager組件、SQLite數(shù)據(jù)庫、SGL組件、3D libraries組件;

Linux內(nèi)核層包括音頻驅(qū)動模塊、Bindre驅(qū)動模塊、攝像頭模塊、顯示驅(qū)動模塊、閃存模塊、鍵盤模塊、電源管理模塊、Wi-Fi驅(qū)動模塊。

本發(fā)明提供的基于Android的無線局域網(wǎng)通信方法,由筆記本電腦或者帶有WLAN熱點(diǎn)功能的智能手機(jī)建立一個局域網(wǎng),將測試手機(jī)通過WiFi連接加入指定的WLAN。之后打開應(yīng)用軟件,系統(tǒng)會檢測到當(dāng)前移動網(wǎng)絡(luò)中存在的通信節(jié)點(diǎn),當(dāng)有新的節(jié)點(diǎn)加入或離開網(wǎng)絡(luò),系統(tǒng)會自動更新其節(jié)點(diǎn)列表,為了方便不同用戶間能快速識別對方的身份信息,可在信息設(shè)置中選擇頭像和修改昵稱。隨后用戶可向局域網(wǎng)中其他用戶發(fā)送或接收消息,實(shí)現(xiàn)基于Android的局域網(wǎng)絡(luò)通信的目的;本發(fā)明詳細(xì)分析了Android系統(tǒng)架構(gòu),應(yīng)用程序的組成,著重探討了Activity和BroadcastReceiver的工作原理和使用技巧,并以此為基礎(chǔ),采用Java為軟件編程語言,無線WLAN技術(shù)為硬件支持,合理調(diào)用Android提供的組件內(nèi)容,實(shí)現(xiàn)基于無線局域網(wǎng)的通信系統(tǒng);通過使用該應(yīng)用軟件,用戶在戶外活動過程中,在共享的局域網(wǎng)環(huán)境下了解到當(dāng)前無線網(wǎng)絡(luò)中其他可通訊用戶的基本信息并進(jìn)行接收發(fā)消息,無需再借助于掌機(jī)、對講機(jī)等移動設(shè)備實(shí)現(xiàn)通訊的需求,極大的方便用戶在戶外的通訊交流。通過系統(tǒng)開發(fā)與后期的實(shí)驗(yàn)測試,該應(yīng)用在無障礙物條件下通訊距離大于等于250米,有障礙物條件下可穿越三堵10~20公分混凝土墻,完成大致20米距離內(nèi)的通訊需求,完全可應(yīng)用于野外考察、災(zāi)區(qū)救援等場合。

附圖說明

圖1是本發(fā)明實(shí)施例提供的基于Android的無線局域網(wǎng)通信方法流程圖。

圖2是本發(fā)明實(shí)施例提供的接收方和發(fā)送方操作步驟流程圖。

圖3是本發(fā)明實(shí)施例提供的節(jié)點(diǎn)加入流程圖。

圖4是本發(fā)明實(shí)施例提供的節(jié)點(diǎn)離開流程圖。

具體實(shí)施方式

為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合實(shí)施例,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。

下面結(jié)合附圖對本發(fā)明的應(yīng)用原理作進(jìn)一步描述。

如圖1所示,本發(fā)明實(shí)施例的基于Android的無線局域網(wǎng)通信方法包括:

S101:基于Android的UDP Socket通信;

S102:實(shí)時發(fā)現(xiàn)有新的節(jié)點(diǎn)加入移動網(wǎng)絡(luò)并更新節(jié)點(diǎn)列表;

S103:有節(jié)點(diǎn)離開時能實(shí)時做出響應(yīng)并告知該網(wǎng)絡(luò)中的用戶,實(shí)現(xiàn)跨網(wǎng)段的通信。

基于Android的無線局域網(wǎng)通信系統(tǒng)設(shè)置有表現(xiàn)層、基于UDP協(xié)議的Socke通信模塊、SQLite數(shù)據(jù)庫和Android操作系統(tǒng);

表現(xiàn)層用于提供用戶操作體驗(yàn)的圖形化界面,顯示節(jié)點(diǎn)列表和消息編輯與記錄,應(yīng)用層的圖形化界面設(shè)置有節(jié)點(diǎn)列表層、個人信息設(shè)置層、通信記錄層、

節(jié)點(diǎn)列表層用于顯示當(dāng)前局域網(wǎng)絡(luò)中可進(jìn)行通訊的網(wǎng)絡(luò)節(jié)點(diǎn)列表,以ListView控件來顯示所有的節(jié)點(diǎn)信息,每個ListItem包含的節(jié)點(diǎn)信息設(shè)置有:

IPAdress:用于顯示網(wǎng)絡(luò)中到達(dá)節(jié)點(diǎn)的IP地址;

User ID:用于確認(rèn)用戶的ID,節(jié)點(diǎn)注冊登錄,作為自己在該網(wǎng)絡(luò)中唯一標(biāo)識自己的字符串或者數(shù)字;

getmessagesCountBuId:用于顯示某個用戶發(fā)來信息,而自身未查看接收的消息的數(shù)量統(tǒng)計(jì);通過點(diǎn)擊列表中的一節(jié)點(diǎn),跳轉(zhuǎn)到聊天界面,進(jìn)行信息的編輯發(fā)送與接收查看;

個人信息設(shè)置層用于用戶根據(jù)自身的主觀意愿選擇喜愛的頭像以及昵稱編輯,當(dāng)用戶個人信息設(shè)置成功后,在下次與網(wǎng)絡(luò)中其他用戶聊天通訊中,顯示在聊天界面當(dāng)中;

通信記錄層用于用戶編輯消息和顯示本機(jī)與指定終端間信息往來的詳情記錄,記錄包含的字段內(nèi)容有:消息內(nèi)容、發(fā)送方與接收方的用戶ID、發(fā)送或接收消息的具體時間;并將這些通信記錄保存在SQLite數(shù)據(jù)庫中;

Android操作系統(tǒng):用于負(fù)責(zé)界面組件的API,數(shù)據(jù)發(fā)送API,SQLite數(shù)據(jù)庫操作API,API包括一組核心的包和類模塊、清單文件的XML元素及屬性聲明模塊、各類意圖模塊、資源文件的XML元素和屬性聲明及訪問形式模塊、可被應(yīng)用程序請求的各類授權(quán)模塊以及授權(quán)執(zhí)行模塊;

基于UDP協(xié)議的Socke通信模塊:用于滿足同個WLAN環(huán)境中,同個網(wǎng)段或不同網(wǎng)段間用戶的通信過程,通過Android提供的數(shù)據(jù)包發(fā)送的接口,接受發(fā)送并對數(shù)據(jù)包內(nèi)容處理,達(dá)到節(jié)點(diǎn)間的互發(fā)現(xiàn)與通訊;

SQLite數(shù)據(jù)庫:用于通過Android自帶的SQLite相關(guān)接口進(jìn)行數(shù)據(jù)儲存和處理。

Android操作系統(tǒng)采用分層的架構(gòu),Android分為四層,由高到低分別為應(yīng)用層、應(yīng)用框架層、系統(tǒng)運(yùn)行庫和linux內(nèi)核層;

應(yīng)用層包括主顯示屏、電話本模塊、聯(lián)系人模塊、時鐘模塊、天氣模塊;電話本模塊、聯(lián)系人模塊、時鐘模塊、天氣模塊均集成在應(yīng)用層集成板上并均與顯示屏連接;

應(yīng)用框架層包括Activity管理器、內(nèi)容提供器、位置管理器、通知管理器、包管理器、資源管理器、電話管理器、視圖系統(tǒng)、窗口管理器;Activity管理器、內(nèi)容提供器、位置管理器、通知管理器、包管理器、資源管理器、電話管理器、視圖系統(tǒng)、窗口管理器均集成在應(yīng)用框架層集成板上;

視圖系統(tǒng)包括按鈕組件、文本框組件、編輯框組件、下拉列表組件、時間選擇器組件;

系統(tǒng)運(yùn)行庫包括Surface Manager組件、SQLite數(shù)據(jù)庫、SGL組件、3D libraries組件;

Linux內(nèi)核層包括音頻驅(qū)動模塊、Bindre驅(qū)動模塊、攝像頭模塊、顯示驅(qū)動模塊、閃存模塊、鍵盤模塊、電源管理模塊、Wi-Fi驅(qū)動模塊。

本發(fā)明提供的基于Android的無線局域網(wǎng)通信方法,由筆記本電腦或者帶有WLAN熱點(diǎn)功能的智能手機(jī)建立一個局域網(wǎng),將測試手機(jī)通過WiFi連接加入指定的WLAN。之后打開應(yīng)用軟件,系統(tǒng)會檢測到當(dāng)前移動網(wǎng)絡(luò)中存在的通信節(jié)點(diǎn),當(dāng)有新的節(jié)點(diǎn)加入或離開網(wǎng)絡(luò),系統(tǒng)會自動更新其節(jié)點(diǎn)列表,為了方便不同用戶間能快速識別對方的身份信息,可在信息設(shè)置中選擇頭像和修改昵稱。隨后用戶可向局域網(wǎng)中其他用戶發(fā)送或接收消息,實(shí)現(xiàn)基于Android的局域網(wǎng)絡(luò)通信的目的;本發(fā)明詳細(xì)分析了Android系統(tǒng)架構(gòu),應(yīng)用程序的組成,著重探討了Activity和BroadcastReceiver的工作原理和使用技巧,并以此為基礎(chǔ),采用Java為軟件編程語言,無線WLAN技術(shù)為硬件支持,合理調(diào)用Android提供的組件內(nèi)容,實(shí)現(xiàn)基于無線局域網(wǎng)的通信系統(tǒng),通過系統(tǒng)開發(fā)與后期的實(shí)驗(yàn)測試,該應(yīng)用軟件可應(yīng)用于野外考察、災(zāi)區(qū)救援等場合。

下面結(jié)合相關(guān)技術(shù)與理論對本發(fā)明的應(yīng)用原理作進(jìn)一步描述。

1、本發(fā)明先圍繞Android相關(guān)技術(shù)與理論進(jìn)行介紹,主要包括簡介、Android系統(tǒng)架構(gòu)、應(yīng)用程序分析,后對UDP Socket通信以及SQLite數(shù)據(jù)庫進(jìn)行分析與探究。

1.1Android相關(guān)技術(shù)與理論

1.1.1Android簡介

Android是Google公司基于Linux操作系統(tǒng)開發(fā)的移動端平臺,主要運(yùn)用于平板電腦和智能手機(jī)。Android開發(fā)包含四大組件,分別為活動(Activity)、服務(wù)(Service)、廣播接收器(BroadcastReceiver)、內(nèi)容提供商(Content Provider),是首個為移動端提供完整的開發(fā)環(huán)境、代碼開源的平臺。它具有以下的平臺優(yōu)勢:

(1)開放性:談?wù)揂ndroid平臺的優(yōu)勢,首先關(guān)注的則是其開放的平臺特征,它允許任何移動終端廠商加入進(jìn)來,為其平臺的發(fā)展與拓廣積累人氣、補(bǔ)充資源。

(2)不受束縛:相較于以往手機(jī)應(yīng)用的發(fā)展很大程度上受到運(yùn)營商的制約,如今的用戶可以很方便的連接網(wǎng)絡(luò),尤其是隨著EDGE、HSDPA等技術(shù)帶來2G、3G移動網(wǎng)絡(luò)的發(fā)展與運(yùn)用。

(3)豐富的硬件:Android平臺開放的特征也為其帶來豐富的硬件設(shè)備,眾多的廠商為當(dāng)今的安卓市場帶來功能各具特色的產(chǎn)品。

(4)方便開發(fā):Android平臺為第三方開發(fā)商提供廣闊、自由的開發(fā)環(huán)境,相較于iphone的各種條條框框阻擾,Android的開發(fā)環(huán)境為其帶來更多新穎多樣化的軟件應(yīng)用。

(5)Google應(yīng)用:Android平臺背后有強(qiáng)大的Google支撐,先進(jìn)技術(shù)的滲透、杰出人才的輸送、系統(tǒng)的組織管理,Android平臺與Google優(yōu)質(zhì)服務(wù)的銜接將帶來更多有價值的應(yīng)用產(chǎn)品。

1.1.2Android系統(tǒng)架構(gòu)

Android的系統(tǒng)架構(gòu)同其他操作系統(tǒng)相同,都是采用分層的架構(gòu)。Android分為四層,由高到低分別為應(yīng)用層、應(yīng)用框架層、系統(tǒng)運(yùn)行庫層和linux內(nèi)核層。

(1)應(yīng)用

Android平臺中所有的應(yīng)用程序都是通過Java語音編寫的,例如電話本、聯(lián)系人、時鐘、天氣等。開發(fā)人員可根據(jù)自己的項(xiàng)目需求為產(chǎn)品引入更多功能豐富多樣化的模塊內(nèi)容。

(2)應(yīng)用框架

應(yīng)用程序框架層是Android開發(fā)所需要應(yīng)用到的一系列API框架,其架構(gòu)的設(shè)計(jì)簡化了組件的重復(fù)使用,例如視圖(Views)就包含了按鈕、文本框、編輯框、下拉列表、時間選擇器等組件。應(yīng)用框架也為開發(fā)人員提供了各種管理器來配合應(yīng)用程序的快速開發(fā),這對于Android平臺應(yīng)用程序的擴(kuò)充與推廣提供了極大的便利。

(3)系統(tǒng)運(yùn)行庫

系統(tǒng)運(yùn)行庫包含的C/C++庫可為不同的組件提供調(diào)用,開發(fā)人員可通過應(yīng)用框架來調(diào)用這個功能庫。核心庫中主要包含Surface Manager、SQLite數(shù)據(jù)庫、SGL、3D libraries等。

(4)Linux內(nèi)核

Android的核心系統(tǒng)是基于Linux 2.6內(nèi)核提供服務(wù)的,主要依賴于它核心系統(tǒng)服務(wù)中的進(jìn)程管理、應(yīng)用權(quán)限及安全、網(wǎng)絡(luò)協(xié)議棧、驅(qū)動模型等。Linux內(nèi)核也同時充當(dāng)硬件與軟件之間的抽象層。

1.1.3Android應(yīng)用程序分析

Android的API主要由幾個模塊組成,分別為一組核心的包和類、清單文件的XML元素及屬性聲明、各類意圖(Intents)、資源文件的XML元素和屬性聲明及訪問形式、可被應(yīng)用程序請求的各類授權(quán)以及包含于系統(tǒng)中的授權(quán)執(zhí)行。

Android的應(yīng)用程序由以下四種主要類型組成:Activity、Service、BroadcastReceiver以及ContentProvider。

(1)Activity

Activity是Android中最常用的應(yīng)用程序類型,一個Activity通常相當(dāng)于一個單獨(dú)的屏幕。在Activity中可以配備一些View,而View類負(fù)責(zé)各種界面中的元素實(shí)現(xiàn),例如標(biāo)簽、編輯框、按鈕等。一個Android應(yīng)用程序中包含有一個或者多個Activity。這些Activity與應(yīng)用程序中的屏幕以一對一的形式對接。

Intent的作用在于解決Android應(yīng)用中各組件之間的通訊,是對將要執(zhí)行的操作的抽象描述。Intent最常見的作用在于可實(shí)現(xiàn)多個Activity之間的跳轉(zhuǎn),其中包含的重要部分為Intent動作(Action)與動作對應(yīng)的數(shù)據(jù)(Data)。

在這里對Activity中的View類做個簡單介紹,Activity通過View來顯示用戶界面的各項(xiàng)元素。LinearLayout、TableLayout、AbsoluteLayout等都是View可以選用的布局設(shè)計(jì)方式,用戶接口可在選擇一種布局之后,通過View來顯示。View元素是通過View控件組建,例如:按鈕、列表、文本編輯框等,每個元素一般都包含有多個屬性。

(2)Service

Service啟動是通過startService(Intent service)實(shí)現(xiàn)的,而通過Context.bindService可對Service進(jìn)行綁定。Service沒有可見的用戶界面,但可以在后臺長時間運(yùn)行。

(3)BroadcastReceiver

BroadcastReceiver通過英文理解可知它是“廣播接收者”的意思,從組件本質(zhì)來看它是一種全局的監(jiān)聽器,對系統(tǒng)全局的廣播信息進(jìn)行實(shí)時監(jiān)聽。在一般情況下,BroadcastReceiver沒有用戶接口,通常注冊于AndroidManifest.xml文件中。

(4)ContentProvider

ContentProvider類因?yàn)閷?shí)現(xiàn)了一組標(biāo)準(zhǔn)的方法接口,使得ContentProvider的各種數(shù)據(jù)能夠被其他應(yīng)用程序存儲和讀取。它是Android的數(shù)據(jù)存儲抽象機(jī)制,對程序間數(shù)據(jù)通信與共享問題的解決提供了很大的作用。

1.2基于UDP協(xié)議的Socket通信

1.2.1socket通信機(jī)制

Socket(套接字)是網(wǎng)絡(luò)應(yīng)用程序的編程接口。每個套接字是通過一個半相關(guān)描述的形式進(jìn)行表示,例如:協(xié)議、本地地址或者本地端口;而一個完整的套接字則使用一個相關(guān)描述,補(bǔ)充進(jìn)遠(yuǎn)程地址和遠(yuǎn)程端口。每一個套接字都有唯一的套接字號,是通過本地的操作系統(tǒng)進(jìn)行分配獲取的。

Socket根據(jù)傳輸數(shù)據(jù)類型的不同,主要分成三種類型:

(1)流式Socket(SOCK_STREAM),這種類型是基于TCP協(xié)議實(shí)現(xiàn)的,兩個通訊的應(yīng)用程序首先要建立虛擬的連接,彼此提供可靠的、面向連接的通信流,從而保證了數(shù)據(jù)傳輸過程的有序性與準(zhǔn)確性。

(2)數(shù)據(jù)報(bào)Socket(SOCK_DGRAM),該類型采用數(shù)據(jù)報(bào)協(xié)議UDP,是一種無連接的服務(wù),傳輸?shù)臄?shù)據(jù)報(bào)文相互獨(dú)立,無順序且可靠性無法得到保證。

(3)原始Socket,該類型允許對底層協(xié)議(IP或ICMP)直接訪問,功能相較前兩者更為強(qiáng)大,但是使用較為不便,很多協(xié)議的開發(fā)基于該類型創(chuàng)造。

1.2.2UDP協(xié)議的工作原理

UDP協(xié)議是面向無連接的傳輸層協(xié)議,區(qū)別于在連接過程中需要服務(wù)器端偵聽的TCP協(xié)議,它是一種“強(qiáng)制性”的網(wǎng)絡(luò)連接。UDP數(shù)據(jù)報(bào)服務(wù)類型分為三種:一對一、一對多和無連接。它不保證數(shù)據(jù)在傳輸過程中是否能到達(dá)目的端、也不能夠保證數(shù)據(jù)在傳輸?shù)倪^程中是否有序進(jìn)行,對于丟失的數(shù)據(jù)不進(jìn)行重新傳輸。UDP協(xié)議的主要工作是負(fù)責(zé)將應(yīng)用程序傳遞過來的數(shù)據(jù)分塊交給網(wǎng)絡(luò)層,確保能夠接收到分組的信息。

雖然UDP協(xié)議無法像TCP協(xié)議那樣保證數(shù)據(jù)傳輸?shù)目煽啃?,但UDP具有自身的優(yōu)越性,尤其在無線網(wǎng)絡(luò)中對數(shù)據(jù)傳輸?shù)囊?,UDP協(xié)議使用范圍更廣。UDP相較于TCP,傳輸效率更勝一籌,而且很多應(yīng)用程序并不要求傳輸?shù)臄?shù)據(jù)具有可靠性,例如視頻通訊,需要實(shí)時的交互,并不要求數(shù)據(jù)的絕對正確與可靠性。

UDP每個端口是由一個唯一的編號進(jìn)行標(biāo)識,使用UDP端口號時,它提供給客戶端發(fā)送消息的位置。當(dāng)應(yīng)用程序要向另一個終端發(fā)送消息時,UDP生成一個數(shù)據(jù)頭,包括源端口,這些端口提供送達(dá)信息所需要的地址。UDP協(xié)議確保數(shù)據(jù)的安全是通過在報(bào)頭中提供校驗(yàn)值的方式,在目標(biāo)計(jì)算機(jī)中,數(shù)據(jù)包被傳遞到UDP協(xié)議程序并且送達(dá)目的地端口。

1.3數(shù)據(jù)庫技術(shù)

當(dāng)應(yīng)用程序要對大量數(shù)據(jù)進(jìn)行處理時,需要使用關(guān)系數(shù)據(jù)庫對這些數(shù)據(jù)信息進(jìn)行存儲、管理以及查詢。Android平臺自身攜帶SQLite數(shù)據(jù)和相關(guān)的API,這對于開發(fā)人員實(shí)現(xiàn)數(shù)據(jù)庫的相關(guān)操作提供了很大的便利。SQLite是完全獨(dú)立的,不依靠于外部應(yīng)用程序獨(dú)立開發(fā),并且它非常健壯,一天內(nèi)可以處理100000多次web站點(diǎn)的點(diǎn)擊率,甚者可以超達(dá)上述數(shù)字10倍負(fù)荷的處理量。SQLite是一個輕型的數(shù)據(jù)庫,在一些簡單的語句處理方面比當(dāng)前業(yè)內(nèi)流行的數(shù)據(jù)庫處理性能更為快捷,對于內(nèi)存有限制的Android移動設(shè)備而言,SQLite數(shù)據(jù)庫更為匹配。

SQLite是一款開源的中小型嵌入式數(shù)據(jù)庫,用途寬廣。它為SQL92提供了大多數(shù)支持,例如:視圖、支持多表與索引、觸發(fā)器等。SQLite具有以下功能特性:支持ACID事務(wù)、對數(shù)據(jù)庫大小的支持達(dá)到2TB、API簡單快捷、可以在不同字節(jié)順序的機(jī)器間自由共享數(shù)據(jù)庫文件信息、不需要安裝以及管理配置、源代碼量大致13萬行所占體積很小等?;谝陨咸匦钥芍?,SQLite數(shù)據(jù)庫為開發(fā)人員在應(yīng)用程序的開發(fā)過程中,提供了很大的便捷性。

下面結(jié)合系統(tǒng)分析與設(shè)計(jì)對本發(fā)明進(jìn)一步說明。

2、系統(tǒng)功能目標(biāo)

基于現(xiàn)有的業(yè)務(wù)流程和對目標(biāo)系統(tǒng)的需求分析,要實(shí)現(xiàn)一個自組織的網(wǎng)絡(luò),主要要實(shí)現(xiàn)以下功能內(nèi)容:實(shí)現(xiàn)基于Android的UDP Socket通信、能及時發(fā)現(xiàn)有新的節(jié)點(diǎn)加入移動網(wǎng)絡(luò)并更新節(jié)點(diǎn)列表、有節(jié)點(diǎn)離開也能及時做出響應(yīng)并告知該網(wǎng)絡(luò)中的其他用戶、能實(shí)現(xiàn)跨網(wǎng)段的通信等。

系統(tǒng)非功能性需求

(1)界面需求

在界面風(fēng)格方面要求結(jié)構(gòu)簡單明了,布局簡潔合理,操作簡單流暢,有助于用戶的快速上手使用。需要實(shí)現(xiàn)的界面有:一個列出當(dāng)前移動網(wǎng)絡(luò)中可到達(dá)的節(jié)點(diǎn)信息概要的界面,一個顯示與某個節(jié)點(diǎn)進(jìn)行消息發(fā)送與查收記錄的聊天界面,一個對用戶個人基本信息修改的界面。

(2)軟硬件環(huán)境

移動手持設(shè)備,操作系統(tǒng)在Android 1.5及以上,要求支持IEEE 802.11協(xié)議。

(3)質(zhì)量需求

質(zhì)量需求是對應(yīng)用軟件應(yīng)具備的質(zhì)量屬性的要求,具體內(nèi)容見表3-1所示。

表3-1質(zhì)量屬性需求表

系統(tǒng)架構(gòu)設(shè)計(jì)

架構(gòu)設(shè)計(jì)部分主要表述的是系統(tǒng)具體功能部件的搭建過程,以及相互間的通信概況,是對編碼成果的檢驗(yàn)。本發(fā)明主要由UI表現(xiàn)層,基于UDP協(xié)議的套接字通信過程,SQLite數(shù)據(jù)庫和Android操作系統(tǒng)四大部分組成。

Android操作系統(tǒng):主要負(fù)責(zé)界面組件的API,數(shù)據(jù)發(fā)送API,SQLite數(shù)據(jù)庫操作API等。

UDP Socket通信協(xié)議:滿足同個WLAN環(huán)境中,同個網(wǎng)段或不同網(wǎng)段間用戶的通信過程。通過Android提供的數(shù)據(jù)包發(fā)送的接口,接受發(fā)送并對數(shù)據(jù)包內(nèi)容處理,達(dá)到節(jié)點(diǎn)間的互發(fā)現(xiàn)與通訊的功能。

數(shù)據(jù)庫:數(shù)據(jù)庫表的設(shè)計(jì)是采用SQLite數(shù)據(jù)庫,通過Android自帶的SQLite相關(guān)接口進(jìn)行實(shí)現(xiàn)。

表現(xiàn)層:手機(jī)上供用戶操作體驗(yàn)的圖形化界面,用于顯示節(jié)點(diǎn)列表和消息編輯與記錄,運(yùn)用到Android提供的相關(guān)類實(shí)現(xiàn)。

表現(xiàn)層設(shè)計(jì)

根據(jù)系統(tǒng)的功能設(shè)計(jì)與架構(gòu)分析,將應(yīng)用劃分為四個層次,本發(fā)明主要對表現(xiàn)層的功能進(jìn)行詳細(xì)分析。

表現(xiàn)層主要基于應(yīng)用的功能需求而設(shè)計(jì)出以下界面內(nèi)容:

(1)節(jié)點(diǎn)列表

該界面用于顯示當(dāng)前局域網(wǎng)絡(luò)中可進(jìn)行通訊的網(wǎng)絡(luò)節(jié)點(diǎn)列表,以ListView控件來顯示所有的節(jié)點(diǎn)信息,每個ListItem包含的節(jié)點(diǎn)信息屬性有:

IPAdress:用于顯示網(wǎng)絡(luò)中可到達(dá)節(jié)點(diǎn)的IP地址;

User ID:用戶的ID,節(jié)點(diǎn)注冊登錄,作為自己在該網(wǎng)絡(luò)中唯一標(biāo)識自己的字符串或者數(shù)字,用戶可根據(jù)自身的喜好更改ID名稱;

getmessagesCountBuId:用于顯示某個用戶發(fā)來信息,而自身未查看接收的消息的數(shù)量統(tǒng)計(jì)。

通過點(diǎn)擊列表中某個節(jié)點(diǎn),可跳轉(zhuǎn)到聊天界面,進(jìn)行信息的編輯發(fā)送與接收查看。

(2)個人信息設(shè)置

該界面用于用戶根據(jù)自身的主觀意愿選擇喜愛的頭像以及昵稱編輯,當(dāng)用戶個人信息設(shè)置成功后,在下次與網(wǎng)絡(luò)中其他用戶聊天通訊中,會顯示在聊天界面當(dāng)中。

(3)通信記錄

該界面用于用戶編輯消息和顯示本機(jī)與指定終端間信息往來的詳情記錄,這些記錄包含的字段內(nèi)容有:消息內(nèi)容、發(fā)送方與接收方的用戶ID、發(fā)送或接收消息的具體時間。這些通信記錄保存在SQLite數(shù)據(jù)庫中,方便檢索查看。

下面結(jié)合附圖和系統(tǒng)實(shí)現(xiàn)方法對本發(fā)明進(jìn)一步說明。

3、開發(fā)環(huán)境

3.1本發(fā)明主要介紹系統(tǒng)實(shí)現(xiàn)所需要的Android開發(fā)環(huán)境搭建與設(shè)計(jì)工具的選擇。系統(tǒng)配置與開發(fā)軟件需求如下:

操作系統(tǒng):windows 7

開發(fā)環(huán)境:Eclipse 4.2

JDK 1.7

Android Development Tools

Android SDK

3.2UDP協(xié)議與組播實(shí)現(xiàn)

如圖3提供的節(jié)點(diǎn)加入流程圖所示:4.2.1UDP Socket通信前期準(zhǔn)備工作

(1)初始化指令緩存

initCmdBuffer():

System.arraycopy(Constant.pkgHead,0,regBuffer,0,3);

//初始化用戶注冊指令緩存

System.arraycopy(Constant.pkgHead,0,msgSendBuffer,0,3);

//初始化信息發(fā)送指令緩存

(2)檢測網(wǎng)絡(luò)連接狀況,獲取本地IP地址

在Android開發(fā)中,獲取本地IP地址的方法有兩種,分別為通過wifi的方式和使用GPRS,二者在正常運(yùn)行過程中,都要對用戶的使用權(quán)限進(jìn)行更改設(shè)定。本軟件采用的是GPRS獲取本地IP地址。

(3)啟動socket連接

comBridge=new CommunicationBridge();

comBridge.start();

(4)注冊廣播接收器

regBroadcastReceiver();

(5)獲得自身相關(guān)信息

getMyInfomation();

包含的參數(shù)類型有:int iconId、String nickname、int myId更新注冊命令和通話命令的用戶數(shù)據(jù)

System.arraycopy(ByteAndInt.int2ByteArray(myId),0,regBuffer,6,4);

System.arraycopy(ByteAndInt.int2ByteArray(iconId),0,regBuffer,10,4);//更新注冊命令的用戶數(shù)據(jù)

System.arraycopy(ByteAndInt.int2ByteArray(myId),0,talkCmdBuffer,6,4);

System.arraycopy(ByteAndInt.int2ByteArray(iconId),0,talkCmdBuffer,10,4);//更新通話命令的用戶數(shù)據(jù);

(6)向網(wǎng)絡(luò)發(fā)送心跳包,并注冊自己。

new UpdateMe().start();

在局域網(wǎng)中接收和發(fā)送數(shù)據(jù)主要采用socket進(jìn)行實(shí)現(xiàn),但是如果socket斷開連接,那么對接收和發(fā)送數(shù)據(jù)將造成影響。Socket中通過定時向?qū)Ψ桨l(fā)送心跳包的形式,告知對方自己仍“在線”,保證網(wǎng)絡(luò)鏈接的有效性。本軟件中,設(shè)定心跳包發(fā)送時間間隔為10秒鐘。

(7)檢查用戶列表是否有超時用戶

new CheckUserOnline().start()。

如圖4提供的節(jié)點(diǎn)離開流程圖所示:當(dāng)某個節(jié)點(diǎn)退出移動網(wǎng)絡(luò),它需要廣播一個remove消息告知網(wǎng)絡(luò)中其它節(jié)點(diǎn),其它節(jié)點(diǎn)通過廣播接收器(broadcastreceiver)收到該消息,會立即做出響應(yīng),將退出的節(jié)點(diǎn)從自身的節(jié)點(diǎn)列表中刪除。本軟件對用戶是否在線檢測時間上限設(shè)置為15秒,如果超過15秒未作出響應(yīng)則從列表中清除該用戶。

(8)通知有新用戶加入或退出

sendPersonHasChangedBroadcast();

當(dāng)一個新的節(jié)點(diǎn)加入移動網(wǎng)絡(luò)時,它會向網(wǎng)絡(luò)中廣播一個HELLO類型的消息,來告訴當(dāng)前網(wǎng)絡(luò)中其它節(jié)點(diǎn)自己的加入。當(dāng)其它節(jié)點(diǎn)收到該節(jié)點(diǎn)發(fā)送過來的消息時,會將其加入到自己的節(jié)點(diǎn)列表中,同時回送一個HELLO_ACK類型的消息,讓新加入的節(jié)點(diǎn)知道當(dāng)前網(wǎng)絡(luò)中有哪些節(jié)點(diǎn)存在,并快速建立起自己的節(jié)點(diǎn)列表。

3.3協(xié)議分析與通訊實(shí)現(xiàn)

UDP是一種面向非連接,不可靠傳輸?shù)耐ㄐ艆f(xié)議,區(qū)別于TCP協(xié)議信息發(fā)送的準(zhǔn)確性,UDP有其傳輸效率較高的優(yōu)點(diǎn),因此在無線網(wǎng)絡(luò)中具有很大的用途。

服務(wù)端:open a socket(socket)——>name the socket(blind)——>send and receive package(sendto recvfrom)——>close socket(closesocket)

客戶端:open a socket(socket)——>send and receive package(sendto recvfrom)——>close socket(closesocket)

在廣播數(shù)據(jù)包之前,發(fā)送方和接收方都要創(chuàng)建一個Socket對象,并且指定DatagramPacket數(shù)據(jù)包用來存儲要被發(fā)送的數(shù)據(jù)。通常在定義UDP Socket服務(wù)時,會對一個固定的端口進(jìn)行監(jiān)聽。在收發(fā)數(shù)據(jù)的過程中,調(diào)用Socket對象的send方法發(fā)送數(shù)據(jù)包,使用receive()方法對其發(fā)送過來的數(shù)據(jù)包進(jìn)行接收,同時receive()也具有阻塞監(jiān)聽的作用。

如圖2提供的接收方和發(fā)送方操作步驟流程圖所示:

1、接收方操作步驟:

(1)啟動Socket連接

comBridge=new CommunicationBridge();

(2)創(chuàng)建一個multicastSocket對象,并設(shè)定監(jiān)聽端口

multicastSocket=new MulticastSocket(Constant.PORT);

multicastSocket.joinGroup(InetAddress.getByName(Constant.MULTICAST_IP));//加入到組播組

(3)創(chuàng)建一個byte數(shù)組進(jìn)行接收

byte[]uId=new byte[4];//獲得用戶ID號

byte[]ipBytes=new byte[4];//獲得請求方的ip地址

byte[]msgBytes=new byte[Constant.msgLength];//接收信息

(4)創(chuàng)建一個空的DatagramPackage對象

DatagramPacket rdp=new DatagramPacket(recvBuffer,recvBuffer.length);

(5)使用receive()方法對發(fā)送方所發(fā)送的數(shù)據(jù)進(jìn)行接收,同時它也是阻塞的方法

multicastSocket.receive(dp);

(6)解析接收到的數(shù)據(jù)信息

person.personId=ByteAndInt.byteArray2Int(personIdBytes);

//接收方ID

person.personHeadIconId=ByteAndInt.byteArray2Int(iconIdBytes);

//發(fā)送方ID

person.personNickeName=(new String(nickeNameBytes)).trim();

//用戶的昵稱

person.ipAddress=

Constant.intToIp(ByteAndInt.byteArray2Int(personIpBytes));

//用戶的IP地址

person.timeStamp=System.currentTimeMillis();

//接收信息的時間

(7)關(guān)閉Socket連接

multicastSocket.leaveGroup(InetAddress.getByName(Constant.MULTICAST_I P));//離開組播組

multicastSocket.close();

2、發(fā)送方操作步驟

(1)啟動Socket連接

comBridge=new CommunicationBridge();

(2)創(chuàng)建一個multicastSocket對象,并設(shè)定監(jiān)聽端口

multicastSocket=new MulticastSocket(Constant.PORT);

multicastSocket.joinGroup(InetAddress.getByName(Constant.MULTICAST_IP));//加入到組播組

(3)創(chuàng)建一個InetAddress

InetAddress inetAddress=enumIpAddr.nextElement();

(4)將消息轉(zhuǎn)為byte類型

byte[]msgBytes=msg.getBytes();

(5)創(chuàng)建一個DatagramPacket對象,并指定其要被發(fā)送到的網(wǎng)絡(luò)中的目的地址以及端口號

DatagramPacketdp

=newDatagramPacket(msgSendBuffer,Constant.bufferSize,InetAddress.getByName(psn.ipAddress),Constant.PORT);

(6)調(diào)用multicastSocket對象的send方法發(fā)送數(shù)據(jù)

multicastSocket.send(dp);

(7)關(guān)閉Socket連接

multicastSocket.leaveGroup(InetAddress.getByName(Constant.MULTICAST_I P));//離開組播組

multicastSocket.close().

圖3是本發(fā)明實(shí)施例提供的節(jié)點(diǎn)加入流程圖。

圖4是本發(fā)明實(shí)施例提供的節(jié)點(diǎn)離開流程圖。

下面結(jié)合系統(tǒng)測試與性能分析對本發(fā)明進(jìn)一步說明。

4.1應(yīng)用程序的實(shí)現(xiàn):

4.1.1用戶操作:

由筆記本電腦或者帶有WLAN熱點(diǎn)功能的智能手機(jī)建立一個局域網(wǎng),將測試手機(jī)通過WiFi連接加入指定的WLAN。之后打開應(yīng)用軟件,系統(tǒng)會檢測到當(dāng)前移動網(wǎng)絡(luò)中存在的通信節(jié)點(diǎn),當(dāng)有新的節(jié)點(diǎn)加入或離開網(wǎng)絡(luò),系統(tǒng)會自動更新其節(jié)點(diǎn)列表。為了方便不同用戶間能快速識別對方的身份信息,可在信息設(shè)置中選擇頭像和修改昵稱。隨后用戶可向局域網(wǎng)中其他用戶發(fā)送或接收消息,實(shí)現(xiàn)基于Android的局域網(wǎng)絡(luò)通信的目的。

4.1.2用戶界面:

首先選擇三部帶有WiFi功能的測試手機(jī),連入同一個局域網(wǎng),依次啟動應(yīng)用,

當(dāng)有新的用戶加入到當(dāng)前局域網(wǎng)并啟動軟件,該用戶能快速獲取到當(dāng)前網(wǎng)絡(luò)中其它通訊節(jié)點(diǎn)的信息,并建立通訊節(jié)點(diǎn)列表,而網(wǎng)絡(luò)中的其它用戶檢測到有新用戶加入,會及時作出相應(yīng),更新自己的通信列表。

4.2性能測試與分析:

4.2.1距離測試:

在距離測試實(shí)驗(yàn)中,為了測量系統(tǒng)在不同的地域環(huán)境中連接到所指定的局域網(wǎng)并保持正常通信的極限距離,我們分別在室內(nèi)、室外選取不同的測試場合。由一部智能手機(jī)開設(shè)熱點(diǎn)建立局域網(wǎng);另一部手機(jī)作為服務(wù)器端,負(fù)責(zé)接收發(fā)送方從不同距離位置發(fā)送過來的消息,驗(yàn)證連接的有效性;第三部手機(jī)作為客戶端,是距離測試實(shí)驗(yàn)的主要對象,通過選取不同的距離位置發(fā)送消息給服務(wù)器端手機(jī),檢驗(yàn)是否能被接收,直到該節(jié)點(diǎn)從服務(wù)器端消失,測量由熱點(diǎn)源到客戶端手機(jī)的直線距離,作為在該地域環(huán)境中,數(shù)據(jù)傳輸所能達(dá)到極限距離的半徑。實(shí)驗(yàn)測試的結(jié)果,詳情如下所示:

無線訪問接入點(diǎn)(AP):vivo x3v rev 1.22.2(based onAndroid),

服務(wù)器端(接收數(shù)據(jù)):魅族mx4based onAndroid 4.4.4,

客戶端(發(fā)送數(shù)據(jù)):Sony S55tAndroid 4.4.2,

1、室內(nèi)環(huán)境:

(1)學(xué)生宿舍:

有無障礙物:有(隔墻),

傳輸距離:隔著兩間宿舍(三堵墻),約為15米,

測試過程:將AP與接收數(shù)據(jù)端手機(jī)放在同一宿舍,后操控客戶端手機(jī),依次從相隔第一間、第二間、第三間屋內(nèi)發(fā)送數(shù)據(jù)到服務(wù)器端,檢測數(shù)據(jù)的有效傳達(dá)性。測量結(jié)果顯示在第三間宿舍發(fā)送數(shù)據(jù)到服務(wù)器端手機(jī),數(shù)據(jù)包已丟失,兩個節(jié)點(diǎn)在各自的通訊列表中無法搜尋到對方,即有效傳輸距離約為15米。

有無障礙物:無(宿舍樓道),

傳輸距離:約56米,

測試過程:選擇行人較少的時段,將AP與接收數(shù)據(jù)端手機(jī)放在樓道一側(cè),之后操控客戶端手機(jī),沿著射線方向逐漸拉開距離,直到兩節(jié)點(diǎn)各自從軟件中搜尋不到對方。通過測量服務(wù)器端與客戶端相隔路程的瓷磚個數(shù),以及每個瓷磚的長度,計(jì)算出有效傳輸?shù)木嚯x約為56米。

2、室外環(huán)境:

(1)北綜排球場外圍(測量距離已超出排球場的直線距離,改為選址排球場外的人行道測試)

有無障礙物:無,

傳輸距離:約96米,

測量過程:選擇行人較少的時段和路段,將AP與接收數(shù)據(jù)端手機(jī)放在道路端點(diǎn)一側(cè),之后操控客戶端手機(jī),沿著直線逐漸拉開距離,直到兩節(jié)點(diǎn)各自從軟件中搜尋不到對方。因傳輸距離較遠(yuǎn),通過測量步長與步數(shù)的方式,計(jì)算出由客戶端到AP的有效傳輸距離約為96米。

有無障礙物:有(行人、車輛等),

傳輸距離:約62米,

測量過程:選擇行人較多的時段,將AP與接收數(shù)據(jù)端手機(jī)放在道路端點(diǎn)一側(cè),之后操控客戶端手機(jī),穿插于人流中,逐漸同服務(wù)器端拉開直線距離,通過測量步長與步數(shù)的方式,得出有效傳輸距離約為62米。

(2)北區(qū)室內(nèi)運(yùn)動館外圍:

有無障礙物:無,

傳輸距離:約118米,

測試過程:與北綜外圍排球場有障礙物測試過程相同

有無障礙物:有,

傳輸距離:約73米,

測試過程:與北綜外圍排球場無障礙物測試過程相同,

(3)情人坡,

有無障礙物:有(樹、陡坡),

傳輸距離:方圓40米內(nèi),覆蓋范圍為整個情人坡,

測試過程:將AP與接收數(shù)據(jù)端手機(jī)放在情人坡路口,之后操控客戶端手機(jī),穿插于樹叢、陡坡、池塘和情人坡的外圍邊界向服務(wù)器端發(fā)送信息。測試結(jié)果顯示,有效傳輸距離覆蓋整個情人坡。

以上實(shí)驗(yàn)基于距離測試得到相應(yīng)的數(shù)據(jù)結(jié)論,下面主要談?wù)撟陨碓趯?shí)驗(yàn)過程中遇到的問題以及對應(yīng)的分析過程:

(1)離AP近的用戶節(jié)點(diǎn)對局域網(wǎng)中其它節(jié)點(diǎn)通訊狀況的改變響應(yīng)時延更短,相較于同AP距離較遠(yuǎn)的客戶端手機(jī),服務(wù)器端能更快判別客戶端是否已斷開連接。

分析:該實(shí)驗(yàn)現(xiàn)象是受調(diào)制方式與碼率因素的影響。希望有更快的傳輸速度,那么要有良好的信噪比進(jìn)行支撐。離AP越近,信號強(qiáng)度越強(qiáng),信噪比越高,那么傳輸?shù)乃俣纫簿驮娇?。相反AP越遠(yuǎn),信號的強(qiáng)度減弱,信噪比變低,那么傳輸?shù)乃俣纫簿驮铰?/p>

從背景噪聲角度分析,信號干擾越大,信噪比越低,傳輸速度越慢。相反信號干擾越小,信噪比越高,傳輸速度越快。

(2)客戶端手機(jī)隨著離AP距離的增加,信號傳輸時斷時續(xù),達(dá)到一定的距離發(fā)現(xiàn)與服務(wù)器斷開連接,停頓片刻之后等信號恢復(fù)正常,可沿更遠(yuǎn)的方向繼續(xù)邁進(jìn),重復(fù)多次,直到信號完全消失。

分析:目前的智能手機(jī)都支持IEEE 802.11協(xié)議,隨著無線局域網(wǎng)技術(shù)的不斷發(fā)展,IEEE 802.11也不斷延伸出諸多的子協(xié)議,例如,作為AP的vivo x3v支持IEEE 802.11a/b/g/n協(xié)議,服務(wù)器端魅族4支持IEEE 802.11a/b/g/n/ac協(xié)議。不同子協(xié)議載波的頻率、傳輸速率、傳輸距離各不相同。隨著客戶端手機(jī)離AP距離越來越遠(yuǎn),不同的子協(xié)議間能自動的進(jìn)行轉(zhuǎn)換,保證移動網(wǎng)絡(luò)連接的有效性。信號時斷時續(xù)的原因,是因?yàn)閰f(xié)議轉(zhuǎn)變過程中存在時間延遲。

(3)在不同時段或選取不同設(shè)備(筆記本電腦或者智能手機(jī))建立局域網(wǎng),在實(shí)驗(yàn)過程中,時常出現(xiàn)系統(tǒng)閃退或者失聯(lián)的現(xiàn)象。

分析:該現(xiàn)象的發(fā)生與網(wǎng)絡(luò)帶寬有很大的原因,尤其在上網(wǎng)高峰時段或者有多個節(jié)點(diǎn)連入當(dāng)前局域網(wǎng)并占用大量的網(wǎng)絡(luò)帶寬,對系統(tǒng)的性能將造成很大的影響。

4.2.2響應(yīng)時間測試:

響應(yīng)時間測試是通過客戶端與服務(wù)器端發(fā)送不同長度的數(shù)據(jù)包,記錄接收時間與發(fā)送時間,二者的時間差即為當(dāng)前長度數(shù)據(jù)傳輸過程中的系統(tǒng)響應(yīng)時間。

由于實(shí)驗(yàn)的測試是基于實(shí)體智能機(jī)進(jìn)行,數(shù)據(jù)由客戶端發(fā)送給服務(wù)端,響應(yīng)時間非常短,得以毫秒計(jì)算。而在手機(jī)設(shè)置中無法將時間精確到毫秒顯示,使得無法確保接收方與發(fā)送方是以相同的時間節(jié)點(diǎn)進(jìn)行實(shí)驗(yàn)測試。

在實(shí)驗(yàn)過程中,為了測試不同數(shù)據(jù)長度傳輸過程中的響應(yīng)時間情況。在初步計(jì)劃擬定中,預(yù)設(shè)測試由100B、1k、10k、100k、1M、10M六個層級數(shù)據(jù)包傳輸情況。但在實(shí)際實(shí)驗(yàn)過程中,發(fā)現(xiàn)數(shù)據(jù)包的大小設(shè)定為10k,相應(yīng)的緩沖區(qū)buffersize也調(diào)整到相應(yīng)的大小后,數(shù)據(jù)由客戶端發(fā)送給服務(wù)端,服務(wù)端無法接收到相應(yīng)的信息,數(shù)據(jù)包在傳輸過程中丟失。通過Google查明原因,得到的解釋為:

一個包沒有固定長度,以太網(wǎng)限制在46至1500字節(jié),1500就是以太網(wǎng)的最大傳輸單元。通信長度,是由發(fā)送方自身決定,但實(shí)際發(fā)送情況受到需求和網(wǎng)絡(luò)狀況的影響。對于TCP而言,這個通信長度可設(shè)置大一些,但Socket內(nèi)部默認(rèn)的收發(fā)緩沖區(qū)大小為8K。對于UDP,一般控制通信長度在1024字節(jié)至10K。無論包有多大,IP層和數(shù)據(jù)鏈路層都會將發(fā)送的包進(jìn)行分片傳輸,而局域網(wǎng)一般控制在1500字節(jié)左右,分片后的包將由不同的路由傳輸?shù)浇邮辗健R驗(yàn)閁DP是不可靠傳輸,對其而言,倘若其中有一個分片丟失,那么接收方的IP層將把整個數(shù)據(jù)包丟棄,這就產(chǎn)生了丟包現(xiàn)象。綜合以上因素,響應(yīng)時間測試實(shí)驗(yàn)未能完成。

以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。

當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1