移動互聯(lián)網(wǎng)應(yīng)用開發(fā)-Android網(wǎng)絡(luò)編程基礎(chǔ)實驗_第1頁
移動互聯(lián)網(wǎng)應(yīng)用開發(fā)-Android網(wǎng)絡(luò)編程基礎(chǔ)實驗_第2頁
移動互聯(lián)網(wǎng)應(yīng)用開發(fā)-Android網(wǎng)絡(luò)編程基礎(chǔ)實驗_第3頁
移動互聯(lián)網(wǎng)應(yīng)用開發(fā)-Android網(wǎng)絡(luò)編程基礎(chǔ)實驗_第4頁
移動互聯(lián)網(wǎng)應(yīng)用開發(fā)-Android網(wǎng)絡(luò)編程基礎(chǔ)實驗_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上西安郵電大學(xué)通信與信息工程學(xué)院實 驗 報 告( 2018/ 2019學(xué)年 第 2 學(xué)期) 課程名稱: 移動互聯(lián)網(wǎng)應(yīng)用開發(fā) 實驗名稱: Android網(wǎng)絡(luò)編程基礎(chǔ)實驗 組成員/學(xué)號: 專業(yè)/班級: 通信工程1612 指導(dǎo)教師: 金蓉 實驗時間: 2019年5月14日 一、實驗?zāi)康暮鸵?1、掌握基于串口通信的Android應(yīng)用程序的開發(fā)方法2、掌握基于多線程的Android應(yīng)用程序的設(shè)計開發(fā)方法3、掌握基于socket套接字的Android應(yīng)用程序的設(shè)計開發(fā)方法二、實驗原理1、串口通信串行端口(SeiailPort)簡稱串口,也稱串行通信接口或串行通訊接口(通常指COM

2、接口),是采用串行通信方式的擴展接口。申行接口是指數(shù)據(jù)一位一位地順序傳送,其特點是通信線路簡單,只要一對傳輸線就可以實現(xiàn)雙向通信(可以直接利用電話線作為傳輸線),從而大大降低了成本,特別適用于遠(yuǎn)距離通信,但傳送速度較慢。串口通信用于ASCII碼字符的傳輸。通信使用3根線完成,分別是地線(GND)、發(fā)送(TX)、接收(RX)。 由于串口通信是異步模式,端口能夠在一根線上發(fā)送數(shù)據(jù)同時在另一根線上接收數(shù)據(jù)。串口通信最重要的參數(shù)是波特率、數(shù)據(jù)位、停止價和奇偶校驗。對于兩個進(jìn)行通信的端口,這些參數(shù)必須匹配。因為串口通信涉及到底層比較難,所以谷歌封裝了一個比較簡單的方法串口類android-serialp

3、ort-api,只要四步我們就可以使用該串口:1)打開串口(及配置串口);2)讀串口;3)寫串口;4)關(guān)閉串口。2、多線程多線程,是指從軟件或者硬件上實現(xiàn)多個線程并發(fā)執(zhí)行的技術(shù)。當(dāng)用戶需要執(zhí)行一些耗時操作,比如發(fā)起一條網(wǎng)絡(luò)請求時,考慮到網(wǎng)速等其他因素,服務(wù)器未必會立刻響應(yīng)請求,那么就必須將這類操作放在子線程中運行,這就需要實現(xiàn)多線程編程。具有多線程能力的計算機因有硬件支持而能夠在同一時間執(zhí)行多于一個線程,進(jìn)而提升整體處理性能。在一個程序中,這些獨立運行的程序片段叫作“線程”(Thread),利用Thread 編程的概念就叫作“多線程處理(Multithreading)”。Android多線程編

4、程與Java 多線程編程語法相同。線程: Android 中的線程是Android程序執(zhí)行流的最小單元,即安卓CPU分配的最小單元是線程。當(dāng)應(yīng)用程序啟動時,Android 首先會開啟一個主線程(也就是UI線程),主線程為管理界面中的UI控件,進(jìn)行事件分發(fā)。Thead.currentThread()是當(dāng)前線程安卓新建線程的兩種方法:1) new Thread(new Runnable()Overridepublic void run()/ TODO Auto-generated method stub).start();2) public class MyThread extends Threa

5、d/繼承Thread類,并改寫其run方法public void run()啟動new MyThread().start();Handler消息處理:Handler是主要接受子線程發(fā)送的數(shù)據(jù), 并用此數(shù)據(jù)配合主線程更新UI。當(dāng)應(yīng)用程序啟動時,Android前先會開啟一個主線程(他就是UI線程),主線程為管理界面中的UI控件,進(jìn)行事件分發(fā),比如說,要是點擊個 Button,Android會分發(fā)事件到Button上,來響應(yīng)你的操作。如果此時需要一個耗時的操作,例如:聯(lián)網(wǎng)讀取數(shù)據(jù),或者讀取本地較大的一個文件的時候,就不能把些操作放在主線程中,如果放在主線程中的話,界面會出現(xiàn)假死現(xiàn)象,如果5秒鐘還沒有

6、完成的話,會收到Android系統(tǒng)的一個錯誤提示“強制關(guān)閉”。這個時候則帶要把這些耗時的操作,放在個子線程中,因為子線程涉及到UI更新,子線程中操作是危險的,也就是說,更新UI只能在主線程中更新。這個時候,Handler就出現(xiàn)了。Handler的使用方法:Message消息,是線程間傳遞的數(shù)據(jù),Handler發(fā)出Handler,處理者,負(fù)責(zé)消息的發(fā)送(send*)和處理(handleMessage,對消息進(jìn)行處理,比如更新UI)作用: a:在工作線程發(fā)送消息b:在主線程獲得消息并處理Message對象arg1,arg2,存放整數(shù)數(shù)據(jù)obj存放Object對象what,指定消息的代碼,根據(jù)代碼執(zhí)

7、行不同操作setData(Bundle),傳遞數(shù)據(jù)量大時使用,可以使用getData()或peekData()方法獲得bundleHandler發(fā)送消息函數(shù)sendMessage(msg)sendEmptyMessag(int what),發(fā)送只包含what值的消息3. Socket套接字套接字(Socket) 是通信端點的一種抽象,它提供了一種發(fā)送和接收數(shù)據(jù)的機制,套接字是計機網(wǎng)絡(luò)中運輸層和應(yīng)用層之間的一種一個中間抽象層,也是一個編程接口,它成對出現(xiàn),一對套接字Socket的組成就是Socket=(IP地址)1:PORT端口號),(IP 地址2:PORT端口號),一個套接字接客戶端,一個套接

8、字接服務(wù)器。TCP協(xié)議定義: Transmission Control Protocol,即傳輸控制協(xié)議,是一種傳輸層通信協(xié)議面向連接:指的是要使用TCP傳輸數(shù)據(jù),必須先建立TCP連接,傳輸完成后釋放連接,就像打電話一樣必須先撥號建立-條連接,打完后掛機釋放連接。全雙工通信:即一旦建立了 TCP連接,通信雙方可以在任何時候都能發(fā)送數(shù)據(jù)??煽康?指的是通過TCP連接傳送的數(shù)據(jù),無差錯,不丟失,不重復(fù),并且按序到達(dá)。面向字節(jié)流:流,指的是流入到進(jìn)程或從進(jìn)程流出的字符序列。簡單來說,雖然有時候要傳輸?shù)臄?shù)據(jù)流太大,TCP報文長度有限制,不能一次傳輸完,要把它分為好幾個數(shù)據(jù)塊,但是由于可靠性保證,接收方

9、可以按順序接收數(shù)據(jù)塊然后重新組成分塊之前的數(shù)據(jù)流,所以TCP看起來就像直接互相傳輸字節(jié)流一樣,面向字節(jié)流。Socket的使用-客戶端創(chuàng)建一個Socket對象,并指定服務(wù)端的IP及端口號Socket socket=new Socket(“192.168.1.32”,1989);獲取發(fā)過的數(shù)據(jù)InputStream inputStream=socket.getInputStream();獲取Socket的OutputStream對象并用于發(fā)送數(shù)據(jù)。OutputStream outputStream=socket.getOutputStream();這里注意:需添加網(wǎng)絡(luò)權(quán)限Socket的使用-服務(wù)端

10、SeverSocket severSocket=new SeverSocket(1989);調(diào)用ServerSocket的accept()方法,接受客戶端所發(fā)送的請求,如果客戶端沒有發(fā)送數(shù)據(jù),那么該線程就停滯不繼續(xù)Socket socket = serverSocket.accept();從Socket當(dāng)中得到InputStream對象InputStream inputStream = socket.getInputStream();從Socketd當(dāng)中得到Outputstream對象OutputStream outputStream = socket.getOutputStream();三、

11、實驗內(nèi)容(一)串口通信實驗實驗步驟:1)硬件準(zhǔn)備:Step1:把協(xié)調(diào)器安裝在平板的串口UART5上:Step2:利用USB線將串口程序運行在實驗箱A9板上調(diào)試。2)軟件編程:Step1:打開Android studio,創(chuàng)建一個項目,項目的名字要求取為“ASChuanKou+各自學(xué)號”。Step2:串口所需的相關(guān)準(zhǔn)備,首先打開SDK Manager,打開SDK Tools,下載NDK, CMake, LLDB (需聯(lián)網(wǎng))。Step3:導(dǎo)入相關(guān)材料,吧提供的jni和jniLibs文件復(fù)制到main文件下,在Project視圖下打開java文件,把android_serialport_api文件夾

12、導(dǎo)入java文件下再打開build.graddle文件把externalNativeBuild ndkBuild path src/main/jni/Android.mk 復(fù)制到android里。Step4:創(chuàng)建全局變量,命名MyApplication。Step5:在Activity里使用串口Step6:在layout頁面布局中修改文本框TextView的ID為tvStep7,:創(chuàng)建全局變量,命名Utils。(2) 線程Thread簡單實驗實驗步驟Step1:打開Android studio,創(chuàng)建一個項目,項目命名“Handler+各自學(xué)號”Step2:創(chuàng)建界面Step3:代碼實現(xiàn)(3) 群聊

13、天功能Socket通信服務(wù)端實驗步驟Step1:打開Android studio,創(chuàng)建一個項目,項目命名“SocketServiceApplication+各自學(xué)號”Step2:創(chuàng)建界面,首先在drawable創(chuàng)建一個shape屬性,這里取名kuang.xmlStep3:創(chuàng)建一個全局的服務(wù)端,用于接受各個客戶端。Step4:在清單文件里面設(shè)置全局變量的name,設(shè)置權(quán)限。Step5:在Activity里面編寫代碼(4) 群聊天功能Socket通信客戶端實驗步驟Step1:打開Android studio,創(chuàng)建一個項目,項目命名“ASScoketClient+各自學(xué)號”Step2:創(chuàng)建界面,首先

14、在drawable中創(chuàng)建一個shape屬性,取名edit_bg.xmlStep3:界面代碼編寫Step4:Activity代碼編寫四、實驗結(jié)果分析(一)串口通信實驗可以讀取到溫度(2) 線程Thread簡單實驗點擊按鈕模擬開啟線程,從子線程向主線程發(fā)送數(shù)據(jù)(3) 群聊天功能Socket通信服務(wù)端可以看到服務(wù)器端可以收到客戶端的消息并且可以發(fā)送消息給客戶端(4) 群聊天功能Socket通信客戶端可以看到客戶端可以發(fā)送消息給服務(wù)端并且可以收到服務(wù)端的消息五、實驗總結(jié)1.在面向連接的Socket通信中,服務(wù)器如何獲知接收到的數(shù)據(jù)來自哪個地址?可以根據(jù)用戶名分辨來自哪個客戶端。2.Socket有幾種類

15、型?編寫通信應(yīng)用時。選擇哪一類Socket的原則是什幺?有以下三類:流套接字(SOCK_STREAM):流套接字用于提供面向連接、可靠的數(shù)據(jù)傳輸服務(wù)。該服務(wù)將保證數(shù)據(jù)能夠?qū)崿F(xiàn)無差錯、無重復(fù)發(fā)送,并按順序接收。流套接字之所以能夠?qū)崿F(xiàn)可靠的數(shù)據(jù)服務(wù),原因在于其使用了傳輸控制協(xié)議,即TCP(The Transmission Control Protocol)協(xié)議。數(shù)據(jù)報套接字(SOCK_DGRAM):數(shù)據(jù)報套接字提供了一種無連接的服務(wù)。該服務(wù)并不能保證數(shù)據(jù)傳輸?shù)目煽啃?,?shù)據(jù)有可能在傳輸過程中丟失或出現(xiàn)數(shù)據(jù)重復(fù),且無法保證順序地接收到數(shù)據(jù)。數(shù)據(jù)報套接字使用UDP(User Datagram Protocol)協(xié)議進(jìn)行數(shù)據(jù)的傳輸。由于數(shù)據(jù)包套接字不能保證數(shù)據(jù)傳輸?shù)目煽啃裕瑢τ谟锌赡艹霈F(xiàn)的數(shù)據(jù)丟失情況,需要在程序中做相應(yīng)的處理。原始套接字(SOCK_RAW):

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論