劉力維
摘? 要:文章介紹了一種在安卓平臺上實現(xiàn)基于HTTP協(xié)議數(shù)據(jù)網(wǎng)關的方法,并詳細闡述了數(shù)據(jù)網(wǎng)關與終端網(wǎng)絡設備之間數(shù)據(jù)傳輸?shù)膶崿F(xiàn)過程。
關鍵詞:安卓平臺;服務器;應用開發(fā)
中圖分類號:TP311? ? ? ? ?文獻標志碼:A? ? ? ? ?文章編號:2095-2945(2020)34-0086-02
Abstract: This paper introduces a method of implementing data gateway based on HTTP protocol on Android platform, and elaborates the implementation process of data transmission between data gateway and terminal network equipment.
Keywords: Android platform; server; application development
1 HTTP數(shù)據(jù)網(wǎng)關功能概述
數(shù)據(jù)網(wǎng)關廣泛應用于各種網(wǎng)絡數(shù)據(jù)采集與傳輸系統(tǒng),為終端網(wǎng)絡設備提供數(shù)據(jù)傳輸?shù)慕涌?,實現(xiàn)對終端網(wǎng)絡設備發(fā)起的數(shù)據(jù)傳輸請求的解析和響應。HTTP協(xié)議是一種典型的基于請求、響應機制的應用層協(xié)議,通過對協(xié)議報文的構(gòu)造,可以方便地將HTTP協(xié)議用于實現(xiàn)數(shù)據(jù)網(wǎng)關各項功能。
隨著移動智能設備的普及,安卓在嵌入式系統(tǒng)中獲得了越來越廣泛的應用。本文介紹的數(shù)據(jù)網(wǎng)關就是一個實現(xiàn)了HTTP數(shù)據(jù)服務器功能的安卓應用系統(tǒng)。系統(tǒng)功能框圖如圖1所示。數(shù)據(jù)網(wǎng)關和終端網(wǎng)絡設備之間通過HTTP協(xié)議進行數(shù)據(jù)通信,接收終端網(wǎng)絡設備的數(shù)據(jù)傳輸請求,并負責向終端網(wǎng)絡設備發(fā)出正確的響應。數(shù)據(jù)網(wǎng)關作為終端設備的數(shù)據(jù)服務器,其數(shù)據(jù)通常來源于本地或網(wǎng)絡數(shù)據(jù)庫存儲的數(shù)據(jù),在網(wǎng)絡采集與傳輸系統(tǒng)中,數(shù)據(jù)也可能獲取自單獨的數(shù)據(jù)采集設備。
2 數(shù)據(jù)網(wǎng)關與終端設備之間的數(shù)據(jù)傳輸過程
數(shù)據(jù)網(wǎng)關與終端網(wǎng)絡設備之間的數(shù)據(jù)傳輸過程可以按功能分解為兩個主要部分,如圖2所示。
首先是數(shù)據(jù)的封裝及解析過程。在網(wǎng)絡終端設備上,進行數(shù)據(jù)發(fā)送前,需要將發(fā)送數(shù)據(jù)按照一定格式進行封裝,以便數(shù)據(jù)網(wǎng)關接收數(shù)據(jù)后能夠通過解析過程得到正確的數(shù)據(jù)。在數(shù)據(jù)網(wǎng)關向網(wǎng)絡終端設備發(fā)送響應報文時同樣需要數(shù)據(jù)的封裝和解析過程。
第二部分功能是基于HTTP協(xié)議的網(wǎng)絡報文收發(fā)。具體包括終端網(wǎng)絡設備向數(shù)據(jù)網(wǎng)關發(fā)送HTTP請求;數(shù)據(jù)網(wǎng)關對該HTTP請求的接收;數(shù)據(jù)網(wǎng)關向網(wǎng)絡終端設備發(fā)送HTTP響應以及終端網(wǎng)絡設備接收處理HTTP響應的過程。安卓平臺上使用HTTP客戶端相關類和方法實現(xiàn)終端網(wǎng)絡設備功能相對來說比較簡單,本文主要分析數(shù)據(jù)網(wǎng)關上述數(shù)據(jù)傳輸過程的具體實現(xiàn)。
3 數(shù)據(jù)封裝的實現(xiàn)
終端網(wǎng)絡設備與數(shù)據(jù)網(wǎng)關之間傳輸?shù)臄?shù)據(jù)通常包含多種類型。為了實現(xiàn)對多種類型數(shù)據(jù)的傳輸,在HTTP數(shù)據(jù)包中采用了JSON數(shù)據(jù)格式對數(shù)據(jù)進行封裝[1]。數(shù)據(jù)傳輸過程如下:
終端網(wǎng)絡設備構(gòu)造HTTP POST請求發(fā)送給數(shù)據(jù)網(wǎng)關,將傳輸數(shù)據(jù)以JSON對象的形式封裝入HTTP請求的消息實體中。通過put方法可以向一個JSON對象添加數(shù)據(jù)。JSON對象內(nèi)部包含多個鍵值對,用來描述具體的請求數(shù)據(jù)。
在數(shù)據(jù)網(wǎng)關上,首先從接收到的HTTP請求得到消息實體,然后使用JSON對象的getString等方法對消息實體進行解析,即可得到具體的請求數(shù)據(jù)。
在數(shù)據(jù)網(wǎng)關發(fā)送給終端網(wǎng)絡設備的HTTP響應數(shù)據(jù)包中,同樣可以進行JSON對象的封裝,并由終端網(wǎng)絡設備進行解析,以實現(xiàn)HTTP響應報文的數(shù)據(jù)傳遞。
4 數(shù)據(jù)網(wǎng)關上HTTP協(xié)議數(shù)據(jù)處理的實現(xiàn)
數(shù)據(jù)網(wǎng)關通過NanoHTTPD實現(xiàn)了HTTP服務器功能。NanoHTTPD是一個免費、輕量級的HTTP服務器,支持多種HTTP請求,通過幾個主要方法和類實現(xiàn)對客戶端連接請求的偵聽和數(shù)據(jù)的傳輸。
實現(xiàn)HTTP網(wǎng)絡數(shù)據(jù)傳輸?shù)牡谝徊剑墙⒖蛻舳伺c服務器間的TCP連接并在適當?shù)臅r候斷開該連接。在建立TCP連接的過程中,終端網(wǎng)絡設備作為客戶端,其任務比較簡單:發(fā)起連接請求,等待服務器的響應并完成握手。數(shù)據(jù)網(wǎng)關作為服務器,負責TCP連接的偵聽、建立和維護工作。在NanoHTTPD中,這部分工作主要在start方法中完成。首先,創(chuàng)建ServerSocket類的實例,并綁定本HTTP連接的主機IP地址和所使用的端口號。接著,在start方法中創(chuàng)建線程,并改寫線程的run方法,用于等待并接收客戶端的連接。在run方法中首先調(diào)用ServerSocket的accept方法,程序?qū)⒆枞谶@里偵聽客戶端的連接請求。當有客戶端請求連接時,程序繼續(xù)運行,設置HTTP session的Keep Alive時間。一旦客戶端與服務器之間的HTTP連接持續(xù)處于空閑狀態(tài)超過該時間,服務器將關閉該HTTP連接。
在start方法創(chuàng)建線程并接收客戶端的連接請求后,通過得到的Socket實例創(chuàng)建用于數(shù)據(jù)收發(fā)的輸入輸出流,并通過AsyncRunner創(chuàng)建一個獨立的線程,來處理這個新的客戶端連接。新線程首先創(chuàng)建一個本地臨時文件,該文件將在后面用于存儲客戶端上傳的數(shù)據(jù)。然后,創(chuàng)建對應該連接的HttpSession,并將臨時文件和輸入輸出流作為輸入?yún)?shù)傳遞給該session。最后,通過while循環(huán)執(zhí)行 HttpSession的exec方法進行客戶端數(shù)據(jù)處理,只要該客戶端連接沒有被關閉,該方法將被循環(huán)調(diào)用。HttpSession的execute方法主要功能是對接收到的客戶端數(shù)據(jù)進行處理,解析出HTTP請求消息的頭域信息和消息實體信息。對于本文中的HTTP網(wǎng)絡數(shù)據(jù)傳輸應用,消息實體中存放的是終端網(wǎng)絡設備HTTP請求的具體內(nèi)容。通過改寫exec方法調(diào)用的serve方法,實現(xiàn)終端網(wǎng)絡設備封裝的JSON對象的解析,可以得到終端網(wǎng)絡設備發(fā)送的具體請求。通過上述過程,實現(xiàn)了終端網(wǎng)絡設備到數(shù)據(jù)網(wǎng)關的一次完整數(shù)據(jù)請求。
數(shù)據(jù)網(wǎng)關向終端網(wǎng)絡設備發(fā)送HTTP響應的過程與前述過程類似,這里不再贅述。
5 HTTP數(shù)據(jù)網(wǎng)關的應用
本文中的數(shù)據(jù)網(wǎng)關采用HTTP協(xié)議,基于IP地址或域名實現(xiàn)網(wǎng)絡數(shù)據(jù)傳輸。該方法既可以應用于有線局域網(wǎng),也可以基于Wi-Fi等無線網(wǎng)絡技術[2]實現(xiàn)移動終端設備與數(shù)據(jù)網(wǎng)關間的數(shù)據(jù)傳輸。如果為數(shù)據(jù)網(wǎng)關分配公網(wǎng)域名和IP地址,則可實現(xiàn)基于廣域網(wǎng)的遠程數(shù)據(jù)傳輸。
參考文獻:
[1]龔建華.JSON格式數(shù)據(jù)在Web開發(fā)中的應用[J].辦公自動化:綜合月刊,2013(20):46-48.
[2]李立芬.基于Wi-Fi技術在電信業(yè)務中的應用[J].中國多媒體通信,2012(12):67-68.
[3]宋銳星,朱小勇,胡琳琳,等.HTTP媒體傳輸方式簡述[J].網(wǎng)絡新媒體技術,2020,9(03):61-67.