999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Android平臺下的TCP客戶機教學設計

2018-11-16 09:35:28馬玉春喬麗娟汪文彬
軟件 2018年10期

馬玉春,劉 雍,喬麗娟,汪文彬

?

Android平臺下的TCP客戶機教學設計

馬玉春,劉 雍*,喬麗娟,汪文彬

(海南熱帶海洋學院海南省嵌入式系統重點實驗室,海南 三亞 572022)

移動互聯網正進入高速普及期,成功的產品和服務模式不斷向其他產業領域延伸滲透,其中最重要的技術之一就是數據的傳輸與處理。本文在Android平臺下對TCP通信任務進行分解,結合多線程技術、消息處理、數據編碼與校驗技術剖析了一個通用多功能TCP客戶機測試軟件的實現過程,從而達到較好的教學效果。

Android;TCP客戶機;多線程;消息;編碼;校驗

0 引言

移動互聯網廣泛應用于眾多領域,作為具體表現形式,可以用Android手機作為TCP客戶機監測遠程對象的狀態或進行遠程控制。TCP客戶機需要跟TCP服務器建立連接,然后在后臺接收數據,這涉及多線程的處理,另外對于一些耗時的工作,也必須采用多線程技術,否則容易導致APP崩潰。主線程與TCP客戶機中運行的線程不在同一個空間,客戶機收到的數據不能直接發送到主線程供分析和處理,必須通過消息機制作為中介來完成此項工作。對于POP3協議,采用的是帶回車換行作為結尾碼的文本類型的協議;而對于遠程控制,則經常采用帶校驗碼與結尾碼的字節型協議[1]。本文創建一個通用的TCP類,結合消息機制和多線程技術,既可以用來開發TCP客戶機應用,又可以用來開發TCP服務器應用;TCP類與數據的編碼與校驗相結合,完成一個通用TCP客戶機軟件工具,可以完成多項工作,具體功能將在軟件測試方面進行展開,其工作模型如圖1所示。

圖1 TCP客戶機工作模型

1 消息機制

消息處理類Handler允許發送和處理Message或Runnable對象到其所在線程的消息隊列中,每個Handler類的實例都與一個線程及其消息隊列相聯系,當創建一個Handler實例時,這個實例就綁定到創建該實例的線程和消息隊列中。Handler類采用post方法將Runnable對象發送到所在線程的消息隊列中排隊執行,可以立即發送,也可以延遲發送,延遲的時間單位為毫秒。Handler類通過send-Message方法將消息發送到所在線程,可以立即發送(空)消息,也可以延遲發送(空)消息,消息中含有需要傳遞到主線程中的數據以及消息識別代碼。Handler的handleMessage是一個自動回調方法,需要根據實際功能重寫,圖1中TCP客戶機在主線程的handleMessage方法中處理TCP客戶機類的對象所收到的數據[2]。

盡管Message類有默認的構造方法,但通常采用Handler對象的obtainMessage方法來獲得并初始化一個Message對象,指定表1所示的參數,其中what用來標識消息,如果需要向主線程傳遞整型變量,直接設置arg1和arg2的值;如果不需要,缺省設置為0即可。obj是Object類型,也就是通用類型,可以是任何類型的數據,但不能是基類型,因而,字節數組必須轉換成ByteBuffer類型的對象。

表1 Message類的常用屬性

Tab.1 Common attributes of message class

在教學設計上,可以安排一個簡單的時鐘軟件項目,用Handler對象每過1秒鐘發送一個空消息,在主線程的handleMessage方法中更新用戶界面中的時鐘信息。也可以安排一個監控手機返回鍵的軟件項目,避免不小心按下返回鍵即退出應用軟件。當第一次按下返回鍵時,過兩秒復位返回鍵,否則,在兩秒之內第二次按下返回鍵即退出當前軟件。這兩個軟件項目都比較簡單,而且可以用來較好地理解消息機制[3]。

2 多線程技術

在Android系統中,所有的操作默認情況下都是在主線程中進行,對于一些比較耗時的操作或者需要并行完成的操作,通常使用一個獨立的線程來執行。獲取IP地址是一個耗時的工作,需要使用多線程,并在其中使用上一節的消息機制將IP地址提交到主線程。

這里以獲取Wi-Fi的IP地址為例。在多線程對象中調用getSystemService方法傳入系統參數從而獲得WifiManager對象,然后調用該對象的getConnectionInfo方法獲取連接信息,從而進一步調用getIpAddress方法獲取int類型的IP地址,可以將此IP地址轉換為文本形式的格式化IP地址。在主線程中通過Thread對象的start方法啟動該多線程,在其中啟用Handler對象的消息機制,將文本形式的IP地址傳送到主線程進行顯示[4]。

在教學設計上,可以安排一個用于獲取IP地址的多線程軟件項目,在主線程啟動多線程獲取IP地址,通過handleMessage回調方法在主線程中獲取IP地址信息并顯示。如果不使用多線程技術,則軟件將直接崩潰。該項目邏輯簡單,但是,能夠較好地說明多線程的作用。

3 TCP類

文獻[5]設計了一個TCP服務器類,并在此基礎之上構建了一個TCP服務器軟件。TCP客戶機與TCP服務器有相似之處,都要建立連接,連接成功后即采用多線程技術在后臺讀取收到的數據,然后通過消息機制將收到的數據提交到主線程。TCP通信具有普遍性,這里創建一個Library共享類庫項目,在其中創建一個TcpClientServer類,使其既支持TCP客戶機,又支持TCP服務器。

表2 TcpClientServer類中的自定義消息

Tab.2 Custom messages in the TcpClientServer class

TcpClientServer類中所定義的消息如表2所示,無論是工作在客戶機或服務器模式,如果軟件收到"Interval?! ",則立即返回"OK! ",同時向主線程發送消息MSG_ReplyOK,該方法從接收數據到返回數據,中間沒有耽誤任何時間,因而,可以用來測試客戶機與服務器之間的時間距離,為軟件研發提供參數設置支持。其他為常規消息,主線程收到MSG_Connected消息,可以進入發送數據環節;收到MSG_Closed消息即可釋放資源;收到MSG_ DataArrived消息,即可提取表1所示的obj數據,利用下一節的編碼與校驗技術對數據進行檢查,如果正確再執行相關操作。

在TcpClientServer類中設置兩個構造函數,都設置Handler參數,用于進行消息傳遞。兩個構造函數不同部分是,如果僅設置端口地址,則TcpClie-ntServer類作為TCP服務器使用;如果設置了主機名稱(或IP地址)和端口地址,則TcpClient-Server類作為TCP客戶機使用。在服務器工作模式下,初始化ServerSocket類時傳入端口地址,得到Server-Socket對象,再調用accept方法,客戶機與服務器連接成功,即可得到Socket對象;在客戶機工作模式下,直接初始化Socket類得到其實例,然后調用其connect方法,傳入遠程主機名稱、端口地址以及連接延遲三個參數,即可與遠程服務器建立連接[6]。本文研發的通用客戶機測試軟件采用后一種工作模式。

得到Socket類的實例后,如果采用文本協議進行TCP通信,則調用其getInputStream方法得到輸入流對象,然后依次獲得InputStreamReader和Buff-eredReader對象,最后啟動多線程通過Buffered-Re-ader對象在后臺讀取文本數據,通過MSG_Data--Arrived消息將收到的數據提交到主線程。相應地,通過Socket類的實例的getOutputStream方法得到輸出流對象,然后依次獲得Output-Stream-Writer和Bu-fferedWriter對象,這樣,主線程即可通過Bu-fferedWriter對象發送文本數據。如果采用字節協議進行TCP通信,則采用BufferedInput-Stream對象在后臺讀取字節數據,主線程則通過BufferedOut-putStream對象發送字節數據。

在教學設計上,先實現客戶機工作模式,與POP3服務器連接后,實現文本數據的接收與發送,再進一步過渡到字節數據的接收與發送。對應地,接著實現服務器工作模式,跟完成的客戶機軟件建立連接,分別實現文本數據的接收與發送,再實現字節數據的接收與發送。當客戶機軟件和服務器軟件都實現以后,將TCP客戶機類與服務器類綜合為一個類,即TcpClientServer,這樣可以方便代碼的維護。

4 編碼與校驗

TcpClientServer類既可以收發文本數據,也可收發字節數據。對于一個字節,有多種不同表達方式,分別用于不同的場景,如表3所示(普通字符列的“-”表示不可見字符)。如果某設備采用字節型協議,為了對該設備進行測試,則需要將收到的數據轉換為16進制字符串形式;而字節數據也可以用16進制字符串來表示,因為字符串方便進行連接,在需要發送的時候,再轉換為字節數據;如果客戶機與服務器之間采用文本協議,則直接采用“普通字符”即可。

表3 字節的不同表示方法

Tab.3 Different representations of bytes

為了適應各種數據的傳輸,在Library類庫項目中創建ByteProcess類,用bytesToHexChars靜態函數實現字節數組到16進制字符串的轉換,用hexCharsToBytes靜態函數實現16進制字符串到字節數組的轉換;用enStringToBytes靜態函數實現普通字符串到字節數組的轉換,通過bytesToEnString靜態函數實現字節數組到普通字符串的轉換;用enStringToHexChars靜態函數實現普通字符到16進制字符串的轉換,通過hexCharsToEnString靜態函數實現16進制字符串到普通字符串的轉換。

編碼只是解決了數據傳輸的形式,而不能保證數據傳輸的正確性,因而,需要對傳輸的數據進行校驗。TCP/IP協議采用累加求補方式,即對于需要發送的字節數組,累加所有字(即每兩個字節作為一個字),然后將結果的低位字與高位字相加,最后將結果取反并取低位字,此即累加求補校驗碼[2]。計算所得的校驗碼一般放在需要發送的數據后面,對方收到數據后,重新計算校驗碼,如果收到的校驗碼和計算所得校驗碼相等,則說明收到的數據正確,就進一步處理,否則直接丟棄。累加求補校驗碼有其特殊性,對包含累加求補校驗碼的數據包進行驗證,只要整體校驗碼計算結果為0,即說明數據正確。相似地,異或校驗碼和循環冗余校驗碼也有此特性。

累加和校驗碼只需要將待發送的字節進行累加取低字節,異或校驗碼只需要將待發送的字節逐個異或。循環冗余(CRC)校驗碼的算法比較復雜,其基本思想是將需要發送的數據包當作一個系數為0或1的多項式。多項式的算術運算采用代數域的理論規則,以2為模進行,即加法沒有進位,減法沒有借位,加法與減法都等同于異或。長除法與二進制中的長除運算類似,只是減法按照模2進行[7]。在Library類庫項目中,添加Parity類,分別實現以上各種校驗碼的計算及數據包的校驗。

在編碼與校驗的教學設計上,設置斷點比較高效,采用“Debug As”模式跟蹤數據的變化,逐個完成數據編碼轉換函數及校驗碼的計算過程。POP3之類的應用層協議需要添加回車換行符作為結尾碼,有的設備需要使用回車符作為結尾碼[8]。結尾碼的添加與檢驗比較簡單,這里不再贅述。

5 軟件測試

新建TcpClient項目,引用以上Library共享類庫,依次導入TcpClientServer類、ByteProcess類和Parity類,設計好軟件界面,即可快速搭建一個通用TCP客戶機軟件,其運行效果如圖2所示。圖2中左側用來顯示數據,上面的單行文本框顯示當前數據,下面的多行文本框顯示歷史數據。右側為參數設置,這里連接的是163的POP3服務器,顯示模式(Display Mode)為字符型(Char),校驗方式(Parity Sort)為無校驗碼(None),結尾碼(End Mark)為回車換行(CRLF),自動大寫待發送的數據,收到數據以后播放提示音。圖中為點擊【Connect】按鈕與POP3服務器建立連接以后的會話情況。

圖2 TCP客戶機軟件界面

將計算機當做一個協議轉換器,手機與計算機同時處于一個無線Wi-Fi網段內,計算機以TCP服務器的方式工作,則此TCP客戶機可以連接此TCP服務器[9]。計算機同時連接RS485工業控制總線的設備,協議轉換器將從手機TCP客戶機收到的信息轉發到RS485設備,再將RS485設備的響應轉發到手機的TCP客戶機,這樣即可用此TCP客戶機對多種編碼、校驗碼類型的設備進行測試[10]。其測試工作原理如圖3所示。

圖3 TCP客戶機用于測試RS485設備

6 結語

本文從教學設計的角度,將知識點進行分解,介紹了Android軟件設計中常用的消息機制和多線程技術,并用于通用TCP類。通過對TCP客戶機與服務器的分析,將兩者綜合起來,共享其數據接收與發送功能,降低了軟件維護成本。最后引入編碼與校驗技術,使得TCP軟件傳輸的數據適應多種編碼方式,又不失可靠性。采用移動互聯網實現通用TCP客戶機,可以對工業控制總線設備及基本的TCP應用層協議進行測試,有效增加了測試的便攜性。

[1] 王小科, 寇長梅. Android入門經典[M]. 機械工業出版社, 2013: 358-363.

[2] 馬玉春. 計算機監控系統的仿真開發[M]. 北京: 國防工業出版社, 2015: 198-226, 21-24.

[3] 劉雍, 孫冰, 馬玉春. 基于消息驅動的Android TCP服務器類的設計[J]. 海南熱帶海洋學院學報. 2017(2): 59-63.

[4] 楊宗德, 劉雍, 呂光宏. Linux高級程序設計[M]. 第三版. 北京: 人民郵電出版社, 2012: 305-309.

[5] 馬玉春, 汪文彬, 李應勇. 基于TCP客戶機的計算機監控系統測試軟件的設計[J]. 軟件. 2014, 35(5): 1-3+12.

[6] 馬程, 魏怡卓, 曹瑜, 等. 老人意外跌倒遠程智能監控系統的設計與實現[J]. 軟件, 2018, 39(3): 209-217.

[7] 毛昊. 一種服務于Android 移動設備的自適應滾屏技術[J]. 軟件, 2018, 39(3): 145-149.

[8] 呂媛媛, 李可. 移動端應用設計中的響應式實現方法[J]. 軟件, 2016, 37(0): 107-109.

[9] Guolin. Android ListView工作原理完全解析, 帶你從源碼的角度徹底理解. 2015.

[10] 耿祥義, 張躍平. Android手機程序設計實用教程[M]. 清華大學出版社. 2013: 258-261.

Instructional Design of TCP Client on Android Platform

MA Yu-chun, LIU Yong*, QIAO Li-juan, WANG Wen-bin

(Hainan Key Laboratory of Embedded Systems at Hainan Tropic Ocean University, Sanya, Hainan 572022, China)

The mobile Internet is entering a period of high-speed popularization. Successful products and service models continue to penetrate into other industry fields. However, one of the most important technologies is the transmission and processing of data. This paper analyses the TCP communication on Android platform, including message processing, thread technology, data encoding and verification, in order to display the desired teaching effect. Finally, the general TCP client is developed and tested based on these technologies.

Android; TCP client; Thread; Message; Encode; Verification

TP311.56

A

10.3969/j.issn.1003-6970.2018.10.004

海南省高等學校教育教學改革研究項目(批準號:Hnjg2018-57);三亞市院地科技合作項目(批準號:2015YD03)

馬玉春(1969-),男,教授,中國計算機學會高級會員(編號:06544S),主要研究方向:移動應用與計算機監控技術;喬麗娟(1981-),女,副教授,主要研究方向:計算機網絡與移動應用;汪文彬(1969-),男,教授,主要研究方向:進化計算與軟件測試。

劉雍(1979-),女,副教授,主要研究方向:移動應用與嵌入式系統。

馬玉春,劉雍,喬麗娟,等. Android平臺下的TCP客戶機教學設計[J]. 軟件,2018,39(10):14-17

主站蜘蛛池模板: 日韩成人午夜| 丰满人妻中出白浆| 97视频精品全国在线观看| 亚洲第一页在线观看| 91无码视频在线观看| 国产超碰一区二区三区| 国产成人乱无码视频| 国产美女无遮挡免费视频网站| 91欧美亚洲国产五月天| 91精品专区| 亚洲 成人国产| 欧美第九页| 国产免费网址| 亚洲欧美日本国产专区一区| 色哟哟国产精品一区二区| 亚洲天堂.com| 国产不卡在线看| 国产乱子精品一区二区在线观看| 日韩成人在线视频| 99精品欧美一区| 全部免费特黄特色大片视频| 亚洲全网成人资源在线观看| 亚洲精品动漫| 特级毛片8级毛片免费观看| 成人精品亚洲| 国产三级国产精品国产普男人| 亚洲成人在线网| 九色综合伊人久久富二代| 2018日日摸夜夜添狠狠躁| 精久久久久无码区中文字幕| 日本高清在线看免费观看| 暴力调教一区二区三区| 国产精品区网红主播在线观看| 在线欧美日韩国产| 91青青在线视频| 国产视频大全| 国产成a人片在线播放| 2022精品国偷自产免费观看| 国产剧情一区二区| 日本精品一在线观看视频| 波多野结衣无码AV在线| 欧美日韩91| 国产美女无遮挡免费视频| 98超碰在线观看| 欧美另类视频一区二区三区| 久青草免费在线视频| 伊人五月丁香综合AⅤ| 日韩精品一区二区三区免费| 久久精品人人做人人爽| 国产微拍精品| 日韩资源站| 国产国语一级毛片| 久久午夜夜伦鲁鲁片无码免费| 91免费片| 亚洲精品视频免费看| 91国语视频| 日本成人一区| 成人午夜视频免费看欧美| 国产精品林美惠子在线观看| 亚洲精品日产精品乱码不卡| 无码免费的亚洲视频| 久久亚洲国产一区二区| 日韩欧美91| 欧美日韩午夜| 超碰91免费人妻| 99热最新在线| 婷婷六月在线| 免费观看国产小粉嫩喷水| 亚洲日本中文综合在线| 青青草91视频| 人妻丰满熟妇啪啪| 欧美、日韩、国产综合一区| 久久美女精品国产精品亚洲| 亚洲三级影院| 日韩成人在线网站| 国产一区二区免费播放| 成年A级毛片| 高清国产在线| 亚洲欧洲日韩久久狠狠爱| 性网站在线观看| 国产成人精品综合| 国产成人91精品|