亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Android平臺(tái)的WiFi文件傳輸系統(tǒng)的設(shè)計(jì)

        2013-01-06 11:28:20苗振興安徽工程大學(xué)計(jì)算機(jī)與信息學(xué)院安徽蕪湖241000
        關(guān)鍵詞:系統(tǒng)

        苗振興 (安徽工程大學(xué)計(jì)算機(jī)與信息學(xué)院,安徽 蕪湖241000)

        馬幼鳴 (北京理工大學(xué)信息與電子學(xué)院,北京100081)

        周鳴爭 (安徽工程大學(xué)計(jì)算機(jī)與信息學(xué)院,安徽 蕪湖241000)

        智能手機(jī)除了基本的通話功能以外,還具備PDA的主要功能,包括辦公、上網(wǎng)、學(xué)習(xí)、游戲等。智能手機(jī)之間的通信除了移動(dòng)運(yùn)營商提供的GPRS或3G方式以外,通常還有紅外、藍(lán)牙和WiFi方式,而這3種通信方式中目前最常用于手機(jī)之間直接互傳文件的仍然是藍(lán)牙。藍(lán)牙技術(shù) (Bluetooth,802.15標(biāo)準(zhǔn))是一種短距離無線通信技術(shù),其傳輸最大速率為1Mb/s,最遠(yuǎn)傳輸距離為10m。然而,智能手機(jī)硬件性能的提高和存儲(chǔ)容量的提升日新月異,藍(lán)牙的傳輸效率就難以滿足用戶日益增長的使用需求。無線局域網(wǎng)的WiFi技術(shù)[1](Wireless Fidelity,802.11b標(biāo)準(zhǔn))也是一種用于短距離無線網(wǎng)絡(luò)傳輸?shù)臉?biāo)準(zhǔn),相對(duì)于藍(lán)牙技術(shù),WiFi有著更加強(qiáng)大的優(yōu)勢(shì),主要表現(xiàn)在傳輸速度更快和傳輸距離更遠(yuǎn)。如今WiFi技術(shù)已經(jīng)不僅用于電腦的聯(lián)網(wǎng)方式,它同時(shí)也被集成于各種終端設(shè)備中,用于互聯(lián)網(wǎng)的連接。如果能夠?qū)崿F(xiàn)用WiFi替代藍(lán)牙的短距離文件傳輸功能,將會(huì)給用戶帶來煥然一新的體驗(yàn),同時(shí)推動(dòng)WiFi在終端設(shè)備中更加廣泛的應(yīng)用。

        作為目前最受歡迎的智能手機(jī)操作系統(tǒng),Android OS[2]是一個(gè)應(yīng)用非常廣泛的平臺(tái),除了智能手機(jī)之外,搭載該系統(tǒng)的設(shè)備還包括平板電腦、智能相機(jī)、智能電視機(jī)等,故在該平臺(tái)下實(shí)現(xiàn)通過WiFi方式的文件傳輸系統(tǒng)更具有實(shí)際意義。

        1 系統(tǒng)設(shè)計(jì)的框架

        1.1 系統(tǒng)結(jié)構(gòu)設(shè)計(jì)

        正如藍(lán)牙傳輸?shù)姆桨敢粯?,該系統(tǒng)首先也要將2部設(shè)備之間建立起點(diǎn)對(duì)點(diǎn)的連接,連接方式為WiFi無線局域網(wǎng)[3]。Android智能手機(jī)上都配置有WiFi掃描連接的功能,只要在手機(jī)上建立無線AP,另一部手機(jī)就可以連接到這個(gè)WiFi網(wǎng)絡(luò)與之組成一個(gè)無線局域網(wǎng)。目前已有部分手機(jī)支持無線AP的建立,系統(tǒng)沒有集成該功能的手機(jī)同樣可以通過安裝第三方軟件的方式實(shí)現(xiàn)。然后,在該局域網(wǎng)中就通過Socket進(jìn)行通信,通信規(guī)則按照自定義的一套協(xié)議就可以實(shí)現(xiàn)文件的傳輸與管理等功能。系統(tǒng)分為服務(wù)端和客戶端2個(gè)部分,分別運(yùn)行于多臺(tái)手機(jī)之上。服務(wù)端只有一個(gè),客戶端可以有多個(gè),根據(jù)Android的多線程可以同時(shí)進(jìn)行多個(gè)客戶端的操作,客戶端軟件作為人機(jī)交互的主要操作界面,服務(wù)器會(huì)自動(dòng)解析用戶的指令并作出響應(yīng)。最后將軟件打包為安卓程序安裝包 (Android package,Apk)的格式,以便安裝使用。Apk是一種壓縮格式,它包含由Java類編譯后的二進(jìn)制文件集合dex文件和程序使用的圖片、音頻、配置文件、界面布局文件、C/C++靜態(tài)庫等資源文件。

        1.2 Android軟件平臺(tái)

        Android OS是Google公司最新推出的面向下一代以移動(dòng)互聯(lián)網(wǎng)業(yè)務(wù)為核心的智能終端開源平臺(tái),它本身是一套軟件堆層 (Software Stack),堆層的具體構(gòu)成框架如圖1所示。其中,標(biāo)準(zhǔn)庫包括Android封裝好的核心類庫以及Java語言API中的基本類庫;Dalvik虛擬機(jī)是谷歌改進(jìn)的Java虛擬機(jī),是基于寄存器的而不是傳統(tǒng)的基于棧的虛擬機(jī),它同時(shí)改進(jìn)了內(nèi)存資源使用的優(yōu)化以及支持多個(gè)虛擬機(jī)的特點(diǎn),Android系統(tǒng)下的每一個(gè)程序在運(yùn)行時(shí)都有一個(gè)Dalvik虛擬機(jī)的實(shí)例;應(yīng)用程序框架層,封裝了Android應(yīng)用程序開發(fā)所需要用到的API,為開發(fā)者提供可重用的組件;應(yīng)用層是Android系統(tǒng)的表面層,負(fù)責(zé)用戶與手機(jī)之間的可視化交互,集成了Android OS堆層的具體構(gòu)成框架Android的所有核心應(yīng)用程序與開發(fā)者開發(fā)的應(yīng)用程序。由圖1可見,應(yīng)用程序雖然表面是用Java語言寫的,但當(dāng)涉及到本地庫或者內(nèi)核層時(shí),便會(huì)用到JNI技術(shù)調(diào)用本地程序,也就會(huì)編譯成NDK應(yīng)用程序。

        Android軟件開發(fā)平臺(tái)的安裝支持3種主流操作系統(tǒng):Windows、Mac OS和Linux。筆者選擇Linux系統(tǒng),因?yàn)長inux下可以更方便使用編譯工具,如NDK[4]。安裝Android的開發(fā)平臺(tái),首先要在官網(wǎng)下載Android SDK,這個(gè)開發(fā)包中包含了各種必備的調(diào)試命令和應(yīng)用程序的API;然后下載較新版本的Eclipse,并且給它安裝Android的開發(fā)插件ADT;由于Eclipse用于編寫和編譯Java代碼,故Linux系統(tǒng)必須安裝好Java環(huán)境;然后在官網(wǎng)下載NDK工具;最后配置一下Linux的環(huán)境變量就完成了開發(fā)環(huán)境的搭建。

        圖1 Android OS堆層的具體構(gòu)成框架

        2 系統(tǒng)功能的實(shí)現(xiàn)

        2.1 軟件設(shè)計(jì)結(jié)構(gòu)

        軟件設(shè)計(jì)結(jié)構(gòu)采用MVC模式來進(jìn)行構(gòu)建 (見圖2)。模型是應(yīng)用程序的主體部分,代表了業(yè)務(wù)數(shù)據(jù)和業(yè)務(wù)邏輯,當(dāng)數(shù)據(jù)發(fā)生改變時(shí),它負(fù)責(zé)通知視圖部分。由于同一個(gè)模型可以被多個(gè)視圖重用,所以提高了應(yīng)用的可重用性。視圖是用戶看到并與之交互的界面,它向用戶顯示相關(guān)的數(shù)據(jù),并能接收用戶的輸入數(shù)據(jù),但是它并不進(jìn)行任何實(shí)際的業(yè)務(wù)處理。視圖能接受模型發(fā)出的數(shù)據(jù)更新事件,從而對(duì)用戶界面進(jìn)行同步更新,還可以向模型查詢業(yè)務(wù)狀態(tài),但不能改變模型??刂破髫?fù)責(zé)邏輯處理、控制實(shí)體數(shù)據(jù)在視圖上展示、調(diào)用模型處理業(yè)務(wù)請(qǐng)求。

        在Android程序開發(fā)過程中,控制部分采用Java語言編寫,針對(duì)不同的數(shù)據(jù)模型和控制程序可以定義在不同的包中。另外,Android對(duì)數(shù)據(jù)的存儲(chǔ)方式[5]有Shared Preference、Content Provider和SQLite等來屏蔽底層具體的存儲(chǔ)細(xì)節(jié),從而使應(yīng)用系統(tǒng)具有良好的數(shù)據(jù)遷移性。視圖層則可以通過定義XML文件的方式來設(shè)計(jì)用戶界面。用戶界面通常設(shè)計(jì)為觸摸、按鍵和其他感應(yīng)器共同操控的交互方式。由于每一個(gè)Xml布局文件都是單獨(dú)編寫的文件,故與數(shù)據(jù)模型和控制部分完全分離,提高 了程序的易讀性和可重用性。

        圖2 客戶端MVC結(jié)構(gòu)圖

        2.2 基于Socket的網(wǎng)絡(luò)通信

        Socket通信是采用客戶機(jī)/服務(wù)器(Client/Server) 的 工 作 模 式[6], 利 用Socket網(wǎng)絡(luò)通信接口來實(shí)現(xiàn)客戶機(jī)和服務(wù)器的通信。Socket接口是TCP/IP網(wǎng)絡(luò)的API,它在OSI(開放式系統(tǒng)互聯(lián)參考模型)中主要集中在傳輸層和會(huì)話層。Socket通常也稱為 “套接字”,用于描述IP地址和端口,是一個(gè)通信連接句柄,應(yīng)用程序的通信是通過Socket向網(wǎng)絡(luò)發(fā)出請(qǐng)求或者應(yīng)答網(wǎng)絡(luò)請(qǐng)求。Socket根據(jù)所采用的協(xié)議可以分為面向連接和面向非連接2種操作方法,采用TCP/IP協(xié)議的Socket操作方法是面向連接的可靠通信;采用UDP協(xié)議的Socket操作方法是面向非連接的不可靠通信。由于面向連接的可靠通信方式更能保證客戶機(jī)與服務(wù)器的數(shù)據(jù)同步性與一致性,故系統(tǒng)采用的是面向連接的方式。Android中提供了Socket和Server Socket 2個(gè)類,并實(shí)現(xiàn)了所有的Socket客戶端和服務(wù)器雙向連接。面向連接的Socket網(wǎng)絡(luò)通信的實(shí)現(xiàn)流程如圖3所示。

        圖3 面向連接的Socket網(wǎng)絡(luò)通信的實(shí)現(xiàn)流程

        2.3 通信協(xié)議的設(shè)計(jì)

        在Socket網(wǎng)絡(luò)通信的過程中,服務(wù)器端建立的初始狀態(tài)是阻塞等待接收客戶端的數(shù)據(jù)流,接收完之后返回?cái)?shù)據(jù)流到客戶端,故這種通信的模型必須是由客戶端首先發(fā)起請(qǐng)求數(shù)據(jù),然后與服務(wù)器之間形成數(shù)據(jù)往返循環(huán)進(jìn)行的交互形式。這種交互必須建立在一套完整的通信協(xié)議之下才能保證數(shù)據(jù)傳輸?shù)慕∪耘c高效性。Java語言中的Socket數(shù)據(jù)流被封裝成為輸出流 (OutputStream)和輸入流 (InputStream),傳輸?shù)幕締挝皇亲止?jié),因此,通信協(xié)議的定義與傳輸?shù)臄?shù)據(jù)都被編排成字節(jié)數(shù)組的格式。對(duì)于字符串類型(String),由于在傳輸?shù)奈募Q包含中文字符時(shí),必須用16位長度的編碼格式,故筆者采用的是UTF-16LE的編碼格式,這種格式下字符串中的字符占用2個(gè)字節(jié),在Java語言中通過String.getBytes(“utf-16le”)方法將字符串中的字符依次轉(zhuǎn)換成對(duì)應(yīng)的字節(jié),從而返回字符串對(duì)應(yīng)的字節(jié)數(shù)組;通過new String(byteArray,“utf-16le”)的方法將字節(jié)數(shù)組中的字節(jié)依次轉(zhuǎn)換成對(duì)應(yīng)的字符,從而返回一個(gè)完整的字符串。對(duì)于整型數(shù)據(jù)類型 (Integer),在Java語言中占4個(gè)字節(jié)的長度,通過4次移位相與的方法轉(zhuǎn)換成一個(gè)4個(gè)字節(jié)數(shù)組;同樣地,對(duì)于一個(gè)整型數(shù)據(jù)轉(zhuǎn)換成的4字節(jié)數(shù)組,也可以通過4次移位相與的方法轉(zhuǎn)換成一個(gè)整型數(shù)據(jù)。對(duì)于文件的數(shù)據(jù)類型,在Android中可以通過FileInputStream和FileOutputStream的方法來構(gòu)造文件輸入流和文件輸出流,這種數(shù)據(jù)流也是以字節(jié)為單位,故可以直接與Socket網(wǎng)絡(luò)數(shù)據(jù)流對(duì)接,無需轉(zhuǎn)換或包裝。

        在用戶的操作過程中,以客戶端作為主要人機(jī)交互端,它包含查看服務(wù)器的文件列表、進(jìn)入文件夾、下載、發(fā)送和刪除文件或文件夾等操作。服務(wù)器則被動(dòng)地響應(yīng)客戶端的請(qǐng)求操作,但無需用戶手動(dòng)操作,它會(huì)自動(dòng)循環(huán)解析客戶端的請(qǐng)求指令,然后回復(fù)相應(yīng)的返回指令和數(shù)據(jù)。指令是一個(gè)由整型數(shù)字轉(zhuǎn)換成的4字節(jié)數(shù)組,所有的指令所對(duì)應(yīng)的數(shù)字代碼都是唯一的??蛻舳说恼?qǐng)求指令與服務(wù)器回復(fù)的指令所采用的格式是不同的??蛻舳税l(fā)送的完整請(qǐng)求數(shù)據(jù)格式為:指令+數(shù)據(jù)長度+數(shù)據(jù)內(nèi)容,其中數(shù)據(jù)長度也是一個(gè)整型數(shù)組轉(zhuǎn)換成的4字節(jié)數(shù)組,它指示的是后面數(shù)據(jù)內(nèi)容的長度,后面的數(shù)據(jù)內(nèi)容可能是文件名稱或者文件信息數(shù)據(jù)。服務(wù)端回復(fù)的完整數(shù)據(jù)格式為:回復(fù)指令+數(shù)據(jù)內(nèi)容,其中回復(fù)指令為16字節(jié)的數(shù)組,它的格式為:指令+錯(cuò)誤信息+結(jié)束符+數(shù)據(jù)長度,這4個(gè)部分都是4字節(jié)數(shù)組,錯(cuò)誤信息指示服務(wù)器在作出回應(yīng)過程中的錯(cuò)誤類型 (沒有錯(cuò)誤回復(fù)0);結(jié)束符指示當(dāng)前信息是第幾條文件,當(dāng)前文件路徑返回1,結(jié)束返回0;數(shù)據(jù)長度指示后面的數(shù)據(jù)內(nèi)容長度,可能是文件名稱或者文件信息數(shù)據(jù)。

        2.4 文件操作與管理

        在Android編程中,對(duì)文件的操作仍然遵循Java語言中的方法。該系統(tǒng)對(duì)文件和文件夾的管理包括創(chuàng)建、刪除、修改和傳輸,對(duì)文件夾的操作實(shí)際上是對(duì)其目錄下的所有文件依次進(jìn)行操作,其中操作最復(fù)雜的也是該系統(tǒng)最重要的部分便是文件的傳輸功能。由于在傳輸過程中,網(wǎng)絡(luò)數(shù)據(jù)流和文件數(shù)據(jù)流都是以字節(jié)數(shù)組的形式包裝的,而這些字節(jié)數(shù)組需要占用Dalvik虛擬機(jī)中大量的內(nèi)存空間,當(dāng)文件過大時(shí),虛擬機(jī)就會(huì)因無法給對(duì)象分配足夠的內(nèi)存空間而導(dǎo)致內(nèi)存溢出的錯(cuò)誤。本設(shè)計(jì)對(duì)此問題采取了以下的解決方案:對(duì)文件的傳輸設(shè)定一個(gè)傳輸塊,大小設(shè)定為5MB,若文件所占空間小于傳輸塊,那么就可以一次讀取或?qū)懭?,不?huì)引起內(nèi)存溢出的問題;若文件所占空間大于傳輸塊,則大文件按照傳輸塊分成若干次分組發(fā)送或者接收,每組發(fā)送過后都要調(diào)用System.gc()方法來回收不用的內(nèi)存空間。為了便于將一個(gè)文件分成多次讀取或者寫入內(nèi)容,使用了RandomAccessFile類,這是一個(gè)支持?jǐn)帱c(diǎn)續(xù)傳的文件類,它建立在一個(gè)文件的基礎(chǔ)上,創(chuàng)建的時(shí)候要申明讀寫權(quán)限,它可以直接讀取或?qū)懭胱止?jié)流,并可以設(shè)置標(biāo)記,實(shí)現(xiàn)對(duì)文件的斷點(diǎn)續(xù)傳。

        在文件的傳輸過程中,需要消耗大量的機(jī)器資源和時(shí)間,而Android系統(tǒng)對(duì)程序設(shè)置了一個(gè)響應(yīng)時(shí)間,如果超出這個(gè)時(shí)間沒有響應(yīng)系統(tǒng)就會(huì)提醒用戶關(guān)閉程序。由于人機(jī)交互界面視圖工作在主線程,若在主線程處理大量的操作,就會(huì)出現(xiàn)界面無響應(yīng)的現(xiàn)象,若使用子線程,必須用到Handler方法(Android中線程消息的管理者),才能間接訪問到界面視圖,增加了程序的復(fù)雜度。針對(duì)這種耗時(shí)長的操作Android系統(tǒng)設(shè)計(jì)了異步任務(wù) (AsyncTask)的方法,異步任務(wù)的設(shè)計(jì)很好地解決了匿名線程存在的問題。對(duì)文件的傳輸操作都是放在異步任務(wù)中執(zhí)行的,實(shí)現(xiàn)了友好的人機(jī)交互界面。

        2.5 權(quán)限控制

        在Android應(yīng)用程序開發(fā)中,應(yīng)用程序?qū)κ謾C(jī)重要功能組件的訪問有著嚴(yán)格的權(quán)限控制方法,對(duì)涉及到手機(jī)安全[7]的操作 (如使用電話和短信服務(wù)、訪問網(wǎng)絡(luò)或者內(nèi)存等)以授權(quán)的方式控制。每一個(gè)Android工程目錄下都有一個(gè)清單文件AndroidManifest.xml,清單可以定義應(yīng)用程序及其組件的結(jié)構(gòu)和元數(shù)據(jù),包括軟件安全模型中的訪問權(quán)限控制。在清單中必須添加uses-permission標(biāo)簽來創(chuàng)建所需要的權(quán)限定義之后,程序才可以使用這些受保護(hù)的組件。在安裝程序的時(shí)候,就會(huì)請(qǐng)求用戶授權(quán)清單文件中設(shè)定的權(quán)限,當(dāng)用戶同意授權(quán)之后才可以安裝運(yùn)行程序。該系統(tǒng)所使用到的權(quán)限有:網(wǎng)絡(luò)訪問、WiFi狀態(tài)訪問、手機(jī)振動(dòng)、內(nèi)存卡訪問以及喚醒鎖的權(quán)限。權(quán)限解釋:網(wǎng)絡(luò)與WiFi權(quán)限用于訪問無線局域網(wǎng);手機(jī)振動(dòng)用于提醒用戶狀態(tài)的改變;內(nèi)存卡的訪問是文件管理的前提;喚醒鎖是為了防止系統(tǒng)進(jìn)入休眠狀態(tài)。

        3 結(jié) 語

        在Android平臺(tái)下采用WiFi方式實(shí)現(xiàn)設(shè)備之間文件互傳,大大提高了短距離通信的效率。不僅如此,該系統(tǒng)支持最低版本Android1.5平臺(tái),而目前市場上的Android設(shè)備所使用的系統(tǒng)版本基本在此版本之上,因此,該系統(tǒng)基本可以安裝運(yùn)行于所有的Android智能手機(jī)和平板電腦。智能終端上的WiFi應(yīng)用日益廣泛,相信不久的將來一定可以給廣大的消費(fèi)者帶來更多便捷的服務(wù)。

        [1]吳功宜 .計(jì)算機(jī)網(wǎng)絡(luò)高級(jí)教程 [M].北京:清華大學(xué)出版社,2007:133-144.

        [2]Google.Android official website [EB/OL].http://www.a(chǎn)ndroid.com/index.html,2012-09-05.

        [3]張琨 .基于Android平臺(tái)的WLAN解決方案 [D].濟(jì)南:山東大學(xué),2010.

        [4]Google.Android NDK | Android Developers[DB/OL].http://developer.a(chǎn)ndroid.co m/tools/sdk/ndk/index.html,2012-09-05.

        [5]Meier R.Android高級(jí)編程 [M].王鵬杰,霍建同 譯 .北京:清華大學(xué)出版社,2010:187-209.

        [6]蔣敏,單家芳,孔軍 .基于socket的多平臺(tái)通信研究 [J].計(jì)算機(jī)工程與應(yīng)用,2005(36):135-141.

        [7]Burns J.Developing secure mobile applications for android [DB/OL].http://www.isecpartner s.com/white-papers/,2012-09-05.

        猜你喜歡
        系統(tǒng)
        Smartflower POP 一體式光伏系統(tǒng)
        WJ-700無人機(jī)系統(tǒng)
        ZC系列無人機(jī)遙感系統(tǒng)
        基于PowerPC+FPGA顯示系統(tǒng)
        基于UG的發(fā)射箱自動(dòng)化虛擬裝配系統(tǒng)開發(fā)
        半沸制皂系統(tǒng)(下)
        FAO系統(tǒng)特有功能分析及互聯(lián)互通探討
        連通與提升系統(tǒng)的最后一塊拼圖 Audiolab 傲立 M-DAC mini
        一德系統(tǒng) 德行天下
        PLC在多段調(diào)速系統(tǒng)中的應(yīng)用
        亚洲av永久无码天堂网| 久久狠狠髙潮曰十八女人| 在线人妻va中文字幕 | 国产又大又硬又粗| 特黄a级毛片免费视频| 国产精品27页| 一区二区三区成人av| 丰满人妻一区二区三区蜜桃 | 好男人视频在线视频| 国产亚洲美女精品久久久2020| 久久精品国产亚洲av四区| 亚洲精品无码专区在线在线播放| 亚洲精品中文字幕无码蜜桃| 国产中文字幕乱码在线| 日本精品少妇一区二区| 人妻 丝袜美腿 中文字幕| 亚洲精品久久国产高清情趣图文| 中出高潮了中文字幕| 精品女厕偷拍视频一区二区区| 成人a级视频在线播放| 夜夜爽一区二区三区精品| 无码成年性午夜免费网站蜜蜂| 成人激情视频在线手机观看 | 中文字幕av无码一区二区三区| 国产精品白浆无码流出| 久久精品国产精品亚洲艾| 国产精品h片在线播放| 成人性生交大片免费看r| 精品国产亚洲av麻豆尤物| 中国男男女在线免费av| 国产又色又爽又高潮免费视频麻豆 | 亚洲欧洲日产国码无码AV一| 国语自产啪在线观看对白| 国产免费牲交视频| 国内a∨免费播放| 自慰高潮网站在线观看 | 伊人色综合视频一区二区三区 | 人人妻人人澡人人爽精品日本| 亚洲国产成人久久综合电影| www.亚洲天堂.com| 日韩人妻精品视频一区二区三区|