倪建新
摘要:隨著移動互聯(lián)網(wǎng)技術在日常生活中的不斷運用,各類手機APP如雨后春筍般出現(xiàn),和傳統(tǒng)WEB網(wǎng)站直接與數(shù)據(jù)庫服務器交互數(shù)據(jù)不同的是,手機APP由于受到硬件和安全性方面的限制,大多需要通過其他方法和數(shù)據(jù)庫服務器進行移動數(shù)據(jù)的交互。該文以Android移動點餐平臺為例,首先分析了平臺的整體架構,其次介紹了服務器端模塊,Socket協(xié)議自定義,移動數(shù)據(jù)交互模塊,Android客戶端模塊等核心內(nèi)容的實現(xiàn)方法,最后在真實環(huán)境中調(diào)試并驗證了該移動數(shù)據(jù)交互方法。
關鍵詞:Socket;移動數(shù)據(jù)交互;Android
中圖分類號:TP393 文獻標識碼:A 文章編號:1009-3044(2017)30-0017-02
Research and Implementation of Mobile Data Interaction Based on Socket Protocol
NI Jian-xin
(Wuxi City College of Vocational Technology, Wuxi 214153, China)
Abstract: With the continuous use of mobile Internet technology in daily life, all kinds of mobile phone APP such as bamboo shoots after a spring rain like appearance, and the traditional WEB different website directly interacts with database server data, mobile phone APP due to the hardware and security restrictions, most need to interact mobile data by other methods and database server. Based on the Android mobile ordering platform as an example, firstly analyzes the overall structure of the platform, then introduces the socket server module, data analysis module, the mobile data exchange module, realization method of the core content of the Android client module, finally in the real environment test and verify the mobile data exchange method.
Key words: Socket; mobile data interaction; Android
隨著移動互聯(lián)網(wǎng)時代的到來,我國的移動應用下載量和新應用的需求迅猛增長,移動APP以其便捷性,多元化的發(fā)展已經(jīng)融入了人們的生活。移動互聯(lián)網(wǎng)上存在著大量的數(shù)據(jù)交互行為,傳統(tǒng)的WEB網(wǎng)站用戶數(shù)據(jù)交互一般都是瀏覽器發(fā)出數(shù)據(jù)請求到服務器端程序,服務器端程序再和數(shù)據(jù)庫服務器進行交互得到用戶需要的數(shù)據(jù),一般都采用直接操縱數(shù)據(jù)庫的方法[1]。移動數(shù)據(jù)交互如果采用這種方法時會帶來一些缺點,如數(shù)據(jù)包大,數(shù)據(jù)傳輸速度慢;實時交互時,服務器性能壓力大;數(shù)據(jù)傳輸安全性差[2]?;谝陨锨闆r,本文提出了通過Socket協(xié)議來對移動數(shù)據(jù)交互進行相應的操作,以移動點餐平臺為例,分析了平臺的整體架構,介紹了服務器端模塊,Socket協(xié)議自定義,移動數(shù)據(jù)交互模塊,Android客戶端模塊等內(nèi)容的實現(xiàn)方法,對移動數(shù)據(jù)的交互研究進行了相應的探索。
1 平臺整體架構分析
本文中的移動點餐平臺采用C/S架構,主要由SQLSERVER2008數(shù)據(jù)庫,Socket服務器模塊,Socket移動數(shù)據(jù)解析模塊以及Android客戶端模塊等相關模塊組成。其中SQLSERVER2008數(shù)據(jù)庫用來管理用戶數(shù)據(jù),Socket服務器用來管理客戶端Socket連接及Socket代理線程,Socket移動數(shù)據(jù)解析模塊負責網(wǎng)絡數(shù)據(jù)的傳輸和解析,Android客戶端模塊則用來負責用戶界面以及用戶數(shù)據(jù)的前端顯示。平臺總體架構及各模塊之間的關系如圖1所示:
圖1 平臺整體架構
2 平臺相關模塊的設計與實現(xiàn)
2.1 Socket服務器端模塊
服務器端由一個Java程序構成,程序運行時啟動Socket Server服務,循環(huán)監(jiān)聽Socket端口,等待移動客戶端的連接,一旦有客戶端通過Socket協(xié)議連接到服務器上時,保持這個鏈接并且啟動一個單獨的服務器端線程來對當前這個客戶端的移動數(shù)據(jù)進行交互處理。
客戶端需要查詢數(shù)據(jù)庫服務器上的數(shù)據(jù)時,首先通過輸出流發(fā)送請求到服務器端,服務器端線程通過輸入流接收該請求,然后經(jīng)過Socket數(shù)據(jù)解析模塊的解析得到具體的查詢內(nèi)容,最后通過服務器端本地的數(shù)據(jù)庫操縱模塊查詢數(shù)據(jù)庫中的相關表得到用戶需要的數(shù)據(jù)[3]。
由于Socket傳輸?shù)臄?shù)據(jù)都是以數(shù)據(jù)流的形式存在,因此在服務器端還設置有數(shù)據(jù)轉換模塊,主要有字符流和數(shù)組數(shù)據(jù)的相互轉換,用于數(shù)據(jù)庫數(shù)據(jù)的查詢和插入;字符流和圖片數(shù)據(jù)的相互轉換,用于圖片的上傳和下載。
2.2 服務器端數(shù)據(jù)操縱模塊
移動客戶端由于硬件性能以及安全性的限制,一般只用于顯示用戶數(shù)據(jù),數(shù)據(jù)庫中數(shù)據(jù)的操縱一般需要放置在服務器端進行。本系統(tǒng)設置有數(shù)據(jù)操縱模塊DBControl,其采用傳統(tǒng)的SQL語句來對本地數(shù)據(jù)庫中的數(shù)據(jù)進行處理,主要包括數(shù)據(jù)庫的連接,表中數(shù)據(jù)的查詢,插入,修改,刪除操作等。
以查詢菜品為例,當服務器端線程接收到該請求時就會馬上調(diào)用DBControl模塊中的getFoodList( )方法,首先連接到本地數(shù)據(jù)庫,創(chuàng)建Statement和ResultSet對象,然后使用Select語句查詢存放菜品的數(shù)據(jù)表得到記錄集,最后將得到的記錄集轉換為數(shù)組數(shù)據(jù)。
同樣當需要插入新的菜品,更新菜品以及刪除菜品時,采用DBControl模塊中其它相應操縱本地數(shù)據(jù)庫的方法得到相應的數(shù)據(jù),由于操作都是在服務器端進行,大大加快了速度并且提高了安全性。
2.3 Socket協(xié)議的自定義和解析
點餐平臺中的數(shù)據(jù)在客戶端和服務器端之間以字符流的形式傳輸,服務器端根據(jù)字符流中的字符數(shù)據(jù)得到想要的操作以及操作的內(nèi)容,由于操作很多,必須對操作加以區(qū)分,程序中在Socket數(shù)據(jù)流的前端加上自定義的規(guī)則以區(qū)分相應的操作。
系統(tǒng)中所有的自定義規(guī)則都以<#開頭和#>結束,后面緊跟著就是操作所需要用的具體數(shù)據(jù)。系統(tǒng)中設計有自定義的規(guī)則<#GET_FOODLIST#>查詢菜品,<#GET_FOODDETAIL#>查詢菜品詳情,<#GET_SHOPCARLIST#>查詢菜單,<#INSERT_ADDORDER#>下單,<#IS_USER#>是否服務員,<#GET_PICTURE#>下載圖片等
如當移動客戶端點擊菜品查詢時,客戶端就發(fā)送帶有<#GET_FOODLIST#>前綴的數(shù)據(jù)流到服務器端,服務器端首先通過線程接收該數(shù)據(jù)流,然后通過startsWith方法匹配相應的自定義規(guī)則,最后解析該數(shù)據(jù)流得到查詢菜品的需求。
2.4 移動數(shù)據(jù)交互模塊
當服務器端解析出字符流中的前綴并得到想要的操作時,就需要根據(jù)該操作以及操作的內(nèi)容來和客戶端完成數(shù)據(jù)的交互,主要有查詢數(shù)據(jù)的返回及顯示,更新數(shù)據(jù)的修改及顯示,插入數(shù)據(jù)的新增等操作。
如服務器端解析出<#GET_FOODLIST#>查詢菜品需求時,首先根據(jù)該前綴后面跟著的FOODTYPEID得到數(shù)據(jù)庫中的菜品列表ID,然后使用Select語句查詢該ID下的所有內(nèi)容,接著轉換成數(shù)組數(shù)據(jù),最后將數(shù)組數(shù)據(jù)轉換成字符流發(fā)送到客戶端,客戶端接收該字符流數(shù)據(jù)并解析出結果,從而完成數(shù)據(jù)庫中數(shù)據(jù)查詢反饋并顯示在客戶端界面上的數(shù)據(jù)交互操作。
查詢操作相關代碼如下:
String temp=msg.substring(18); //截取前綴之后的內(nèi)容
myfoodtypeid=Integer.parseInt(temp); //轉換為整型數(shù)據(jù)
ls=DBControl.getFoodList(myfoodtypeid); //查詢得到數(shù)組數(shù)據(jù)
mess=StrListChange.ListToStr(ls); //將數(shù)組數(shù)據(jù)轉換為字符流
dout.writeUTF(mess); //將得到的數(shù)據(jù)傳送移動客戶端
當有數(shù)據(jù)從客戶端寫入到數(shù)據(jù)庫時則使用相反的操作,首先將需要寫入的數(shù)據(jù)以特殊的字符分隔開,附加到自定義的前綴后面發(fā)送到服務器端,然后服務器端解析該前綴并將字符流數(shù)據(jù)轉換成數(shù)組數(shù)據(jù),最后使用Insert語句對照數(shù)據(jù)表中的字段名將數(shù)組數(shù)據(jù)依次寫入到數(shù)據(jù)表中,從而完成移動客戶端數(shù)據(jù)寫入到數(shù)據(jù)庫中的交互操作。
寫入交互操作相關代碼如下:
content=msg.substring(17,msg.length()); //截取前綴之后的內(nèi)容
array=StrListChange.StrToArray(content); //寫入的字符流轉換為數(shù)組
DBControl.insertOrder(array); //調(diào)用寫入方法寫入到數(shù)據(jù)庫
dout.writeUTF("ok"); //返回寫入成功到移動客戶端
2.5 Android客戶端模塊
Android客戶端模塊的功能是將接收到的移動數(shù)據(jù)顯示在用戶的手機屏幕上,分為前端布局和后臺數(shù)據(jù)綁定兩大部分。在布局上考慮到手機屏幕大小及用戶操作的習慣大量采用了ListView組件,ListView中的每一行都可以根據(jù)需求單獨布局以便匹配數(shù)據(jù)表中的字段。如顯示菜品時,每一行采用LinearLayout布局,一行上放置有ImageView組件和TextView組件。程序使用了SimpleAdapter適配器作為橋梁將ListView和移動數(shù)據(jù)綁定并顯示在用戶界面中。
3 平臺的調(diào)試環(huán)境及運行實例展示
本點餐平臺服務器端的軟件配置環(huán)境為Windows2003操作系統(tǒng),SQLSERVER2008數(shù)據(jù)庫,JDK6.0,移動客戶端測試機型為Android虛擬機和Android手機紅米2A,1G內(nèi)存,1280*720分辨率,調(diào)試時系統(tǒng)運行流暢,頁面顯示及頁面之間切換快速,用戶體驗良好。平臺運行效果如圖2所示:
4 結束語
智能手機的普及為移動APP的開發(fā)和使用打下了堅實的基礎,未來移動客戶端各類APP開發(fā)將會迎來廣闊的發(fā)展空間。本文分析了基于Socket的移動數(shù)據(jù)交互方法,并以移動點餐平臺為例,對Socket服務器端,Socket協(xié)議的自定義以及移動數(shù)據(jù)的交互過程進行了詳細的闡述,為服務器端和移動客戶端之間的數(shù)據(jù)交互提供一些開發(fā)思路和開發(fā)方法。
參考文獻:
[1] 霍劍峰. 基于JAVA WEB的虛擬數(shù)字圖書電子商務平臺設計與實現(xiàn)[D]. 長春: 吉林大學, 2015.
[2] 孫鵬飛. 移動綜合網(wǎng)絡應用客戶端和服務器的研究與開發(fā)[D]. 北京: 北京郵電大學, 2013.
[3] 李揚, 耿昌宇, 張麗芬. 基于Socket通訊模式下的跨平臺數(shù)據(jù)同步[J]. 北京理工大學學報, 2002(1):81-84.endprint