段 昕,朱國魂
(桂林電子科技大學 電子工程與自動化學院,廣西 桂林 541000)
通信技術和高性能芯片技術的發展,使移動設備在無線聯網和運算性能方面得到了較大的提升。但移動設備本身存儲不足,CPU性能瓶頸依舊是難以跨越的使用障礙。與此同時,PC終端具有存儲空間大、運算能力強的優點。無線通信技術,特別是WiFi技術和Android技術的發展為移動設備結合PC終端的優點來解決自身的不足提供了好的平臺。如何實現Android平臺與PC終端之間的資源共享成為研究的熱點。
一些軟件在移動終端對PC終端的控制和文件的相互傳輸方面做了大量的工作,如QQ、RemoteView等。但是它們只是完成了對PC的控制[1-3]或者文件傳輸[4]等單一的工作,沒有充分利用PC終端的資源。針對這種情況,本文提出一種基于Android的跨平臺資源利用與管理系統,系統客戶端(移動設備)通過WiFi網絡[5-6]實現對服務器端(PC終端)實時顯示和觸屏操作,使用戶可以通過移動設備來完成對PC終端大型軟件的使用。同時,用戶還能通過系統的文件傳輸模塊,來實現所需文件的傳遞和不急需文件的存儲,達到資源共享和合理調配的目的。
Android平臺支持Java網絡編程方式[7-8],因此系統采用Socket工作模式,利用Socket的網絡通信接口實現客戶端與服務器端的信息交換。Socket通常被稱為“套接字”,用于描述IP地址和端口,應用程序通過Socket向網絡發送網絡請求或應答網絡請求來進行信息傳遞。Socket面向客戶/服務器模型而設計,SeverSocket用于服務器端。在連接成功后,通信兩端都會產生一個Socket實例,從而在通信的兩端形成虛擬鏈路,兩端的程序通過建立的虛擬鏈路進行通信。
Socket網絡通信實現流程如圖1所示。首先,服務器端創建ServerSocket對象,指定端口號,等待客戶端的連接請求。客戶端創建Socket對象,同時也指定主機地址和端口號,并向服務器端發出連接請求。服務器端接收到客戶端的連接請求后,建立一條TCP連接,與客戶端的Socket對象進行通信。服務器端和客戶端分別創建字節輸入流和字節輸出流,其中,字節輸入流用于獲取對方發來的數據,字節輸出流用于向對方發送數據。當一方決定結束通信時,向對方發送結束信息,另一方接收到結束信息后,雙方分別關閉各自的TCP連接。

圖1 Socket網絡通信流程圖Fig.1 The flow chart of Socket network communication
系統采用C/S模式體系架構,主要由客戶端和服務器端組成,其中,客戶端通過IP地址、端口號與服務器建立網絡連接,用戶向服務器端發送用戶命令,用戶命令通過無線網絡到達服務器端,服務器端接收指令完成相關操作并傳遞反饋信息到客戶端,客戶端得到用戶所需的結果。
客戶端建立在基于Android操作系統的移動設備基礎上,采用Eclipse工具下的Android插件進行開發。程序設計主要基于Java語言對其進行實現,并調用了Android的部分API函數庫??蛻舳耍鳛榕c用戶的交互平臺,主要功能包括實現與服務器端的網絡連接、顯示服務器端屏幕內容完成用戶對服務器端的實時操作、實現客戶端與服務器端的文件管理和數據交流以及服務器端的關機、重啟等,它集中了系統的大部分功能。服務器端位于PC端,主要負責對客戶端發送來的命令進行監聽以及做出響應。系統總體架構如圖2所示。
圖3為系統的流程圖。如圖3所示,當系統啟動后,登錄界面自動顯示上次連接的相關信息,用戶如果使用該連接,則直接點擊登錄即可。如果用戶需要創建一個新的連接,則需要輸入該新連接所需信息 (包括連接的IP地址、端口號等),信息設置完后,點擊“登錄”。若連接沒有建立成功則反饋連接失敗信息,若成功則進入主界面。同時,如果連接成功,則說明該IP地址和端口號的連接為可靠連接,需將其保存起來,以備下次登錄使用。連接成功后進入到系統主界面,其由PC交互模塊、文件管理模塊、重啟和關機模塊組成。在該界面下,用戶可以根據需要選擇不同的功能模塊。

圖2系統總體架構Fig.2 The overall framework of the system
由于Android系統支持Java語言進行開發,因此系統完全使用Java語言進行實現。作為系統的核心模塊,用戶交互事件和文件管理模塊成為主要研究對象。用戶交互模塊主要用于用戶與系統之間的信息交流,本模塊中有觸摸事件、功能按鈕監聽和用戶界面的屏幕顯示等功能,可以供用戶對系統進行任意操作。文件管理模塊主要解決用戶對資源的跨平臺調用和共享等問題,模塊中包括文件的下載、上傳等功能,實現了用戶對資源的合理調配。

圖3系統流程圖Fig.3 The flow chart of the system
用戶交互模塊主要為解決客戶端對服務器端軟件的使用而設計。當用戶進入交互模塊,開啟PC交互線程,與服務器端建立交互連接,服務器端通過Java類庫的Robot類的createScreenCapture()方法按時間間隔對PC進行整體截屏。同時使用Graphics2D類的draw Image()方法按客戶端屏幕比例和JPG格式對圖片進行壓縮,再通過I/O流發送至客戶端。客戶端接收該圖片并將其全屏顯示,這樣,客戶就可以通過客戶端對服務器端應用進行直觀的、實時的操作。
客戶端通過使用Android類庫的GestureDetector類來識別觸摸屏的手勢與動作并配合鼠標功能按鈕來實現對服務器端的操作。觸摸事件主要包括單擊事件、雙擊事件、滑動事件等。分別通過實現GestureDetector類接口On Gesture Listener、OnDoubleTapListener和重寫 GestureDetector類內部方法onFing()等來達到目的。用戶交互界面同時設置左右鼠標功能按鈕區,左部對應于鼠標位置的空間移動和調整,右部對應于鼠標的點擊與滑輪功能。
監聽到用戶的操作信息后,客戶端將操作信息的對應指令發送至服務器端,服務器端對這些指令進行甄別,然后通過Robot類相關方法進行響應。用戶交互界面如圖6所示。
文件管理模塊主要用于實現客戶端與服務器端文件資源的合理調配共享。該模塊分為文件下載管理模塊和文件上傳管理模塊。文件下載模塊針對服務器端文件資源的管理,而文件上傳管理模塊則針對于客戶端文件資源的管理。用戶需要調用文件資源時,系統開啟服務器端文件管理線程,服務器端使用 Java類庫的 FileSystemView、DecimalFormat和File等類的相關方法獲得服務器端的桌面、文檔和磁盤等的相關屬性(如名字、已使用的空間及剩余空間等),將其Json解析后,傳遞給客戶端??蛻舳藢⒎掌鞫宋募畔⒁粤斜淼男问竭M行顯示。文件下載模塊如圖4所示。

圖4文件下載管理模塊Fig.4 The module of file download management
用戶下載服務器端文件資源時,系統除了開啟下載線程外,還需要在客戶端對要下載的文件進行存在性判斷。若需下載的文件已經存在,則提示是否繼續該文件的傳輸,是則繼續傳輸,并覆蓋原存在的文件,否則取消文件的傳輸。如果將傳輸的文件不存在,則對文件類型進行判斷,判斷其是小文件還是大體積文件或者批量文件。若為小文件,則通過Socket封裝的I/O流方法直接進行下載;若為大體積文件,則將文件分成若干大小模塊,采用RandomAcessFile類,該類直接繼承于 Object類,可以通過 seek(),getFilePointer()等方法操作的指針,方便對數據進行位置標記,寫入與讀取,實現對文件斷點續傳;若為批量文件傳輸則使用多線程技術進行下載。由于文件上傳管理模塊與文件下載模塊實現過程基本相同,此處不再贅述。文件上傳管理模塊如圖5所示。

圖5文件上傳管理模塊Fig.5 The module of file upload management
在測試環境中,客戶端采用操作系統為Android4.0的三星手機,服務器端采用操作系統為Windows8的宏脼E1-571G??蛻舳送ㄟ^無線路由器建立的無線局域網絡訪問服務器,使用預先定義好的端口號和IP地址與服務器進行連接。

圖6 PC交互模塊Fig.6 The module of PC interaction

圖7文件下載模塊Fig.7 The module of file download

圖8文件上傳模塊Fig.8 The module of file upload
PC交互模塊效果如圖6所示。文件下載模塊效果如圖7所示。文件上傳模塊效果如圖8所示。反復測試表明,在局域網內,所設計的客戶端與服務器端之間能夠建立快速且穩定的連接,而服務器端也能對客戶端的各種命令做出及時且正確的響應。實時畫面傳輸、軟件跨平臺使用及文件資源的跨平臺管理等功能都具有很好的效果。
文中設計并實現了一個基于Android的跨平臺資源利用與管理系統。系統利用Socket編程實現了移動設備對PC終端的軟件實時操作以及二者之間資源的合理調用和資源的跨平臺整合,充分的利用了PC終端運算能力強、存儲空間大等優點,解決了移動設備自身存儲能力不足和CPU瓶頸等問題。隨著信息爆炸時代的到來,移動終端需要處理的數據將越來越大,數據的交換也越來越頻繁,將本文設計的系統運用到其中,具有廣闊的發展前景。
[1]郭宏志.Android應用開發詳解[M].北京:電子工業出版社,2010.
[2]劉莎莎,張哲.基于Android平臺的鼠標的設計與實現[J].電子器件,2012,35(1):79-82.LIU Sha-sha,ZHANG Zhe.Design&implementation of cursor based on Android platform[J].Chinese Journal of Electron Devices,2012,35(1):79-82.
[3]耿東久,索岳,陳渝,等.基于Android手機的遠程訪問和控制系統[J].計算機應用,2011,31(2):559-561,571.GENG Dong-jiu,SUO Yue,CHEN Yu,et al.Design&Implementation of Android phone based access and control in smart space[J].Journal of Computer Applications, 2011,31(2):559-561,571.
[4]苗振興,馬幼鳴,周鳴爭.基于Android平臺的鼠標的WiFi文件傳輸系統的設計[J].長江大學學報,2013,7(10):17-20.MIAO Zhen-xing,MA You-ming,ZHOU Ming-zheng.Design of cursor WIFI file transfer system based on android platform[J].Journal of Yangtze University,2013,7(10):17-20.
[5]彭海深.基于WIFI的企業網信息安全研究[J].科技通報,2012,28(8):145-147.PENG Hai-shen.Research of enterprise network information security on WIFI[J].Bulletin of Scienceand Technology,2012,28(8):145-147.
[6]吳明,董灝曦.WIFI技術在家庭無線網絡中的應用[J].無線互聯科技,2012(2):11.WU Ming,DONG Hao-xi.Application of WIFI technology in home wireless network[J].Wireless Internet Technology,2012(2):11.
[7]梁普選.Java程序設計與網絡編程[M].北京:清華大學出版社,2007.
[8]陳文,郭依正.深入理解Android網絡編程:技術詳解與最佳實踐[M].北京:機械工業出版社,2013.