Android應(yīng)用開發(fā)項目式教程課件:智能家居-網(wǎng)絡(luò)通信_第1頁
Android應(yīng)用開發(fā)項目式教程課件:智能家居-網(wǎng)絡(luò)通信_第2頁
Android應(yīng)用開發(fā)項目式教程課件:智能家居-網(wǎng)絡(luò)通信_第3頁
Android應(yīng)用開發(fā)項目式教程課件:智能家居-網(wǎng)絡(luò)通信_第4頁
Android應(yīng)用開發(fā)項目式教程課件:智能家居-網(wǎng)絡(luò)通信_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

智能家居——網(wǎng)絡(luò)通信本項目學(xué)習(xí)任務(wù)TCP通信HTTP通信1.TCP通信的原理TCP協(xié)議是面向連接的通信協(xié)議,即在傳輸數(shù)據(jù)前先在發(fā)送端和接收端建立邏輯連接,然后再傳輸數(shù)據(jù),保證了兩臺計算機之間可靠無差錯的數(shù)據(jù)傳輸。TCP協(xié)議傳送速度較慢,但傳送的數(shù)據(jù)比較可靠。由于TCP協(xié)議的面向連接特性,它可以保證傳輸數(shù)據(jù)的安全性和完整性,所以是一個被廣泛采用的協(xié)議,例如在下載文件時,如果數(shù)據(jù)接收不完整,將會導(dǎo)致文件數(shù)據(jù)丟失而不能被打開,因此,下載文件時必須采用TCP協(xié)議。網(wǎng)絡(luò)編程基礎(chǔ)TCP通信同UDP通信一樣,都能實現(xiàn)兩臺計算機之間的通信,通信的兩端則都需要創(chuàng)建Socket對象。TCP通信與UDP通信的其中一個主要區(qū)別在于,UDP中只有發(fā)送端和接收端,不區(qū)分客戶端與服務(wù)器端,計算機之間可以任意地發(fā)送數(shù)據(jù);而TCP通信是嚴格區(qū)分客戶端與服務(wù)器端的,在通信時,必須先由客戶端去連接服務(wù)器端才能實現(xiàn)通信,服務(wù)器端不可以主動連接客戶端。TCP通信JDK中提供了ServerSocket類,表示服務(wù)器端;Socket類表示客戶端。通信時,首先要創(chuàng)建代表服務(wù)器端的ServerSocket對象,該對象相當于開啟一個服務(wù),并等待客戶端的連接;然后創(chuàng)建代表客戶端的Socket對象,并向服務(wù)器端發(fā)出連接請求,服務(wù)器端響應(yīng)請求,兩者建立連接后可以正式進行通信。2TCP通信ServerSocket()該構(gòu)造方法在創(chuàng)建ServerSocket對象時并沒有指定端口號,使用時還需要調(diào)用bind(SocketAddressendpoint)方法將其綁定到指定的端口號上。ServerSocket(intport)該構(gòu)造方法在創(chuàng)建ServerSocket對象時,可以綁定到指定的端口號上。如果port參數(shù)值為0,此時系統(tǒng)就會分配一個未被其他程序占用的端口號。由于客戶端需要根據(jù)指定的端口號來訪問服務(wù)器端程序,因此端口號隨機分配的情況并不常用,通常都會給服務(wù)器端指定一個端口號。ServerSocket——常用構(gòu)造方法TCP通信ServerSocket——常用方法方法聲明功能描述Socketaccept()該方法用于等待客戶端的連接,在客戶端連接之前一直處于阻塞狀態(tài),如果有客戶端連接就會返回一個與之對應(yīng)的Socket對象InetAddressgetInetAddress()該方法用于返回一個InetAddress對象,該對象中封裝了ServerSocket綁定的IP地址booleanisClosed()該方法用于判斷ServerSocket對象是否為關(guān)閉狀態(tài),如果是關(guān)閉狀態(tài)則返回true,反之則返回falsevoidbind(SocketAddressendpoint)該方法用于將ServerSocket對象綁定到指定的IP地址和端口號,其中參數(shù)endpoint封裝了IP地址和端口號TCP通信Socket()該構(gòu)造方法在創(chuàng)建Socket對象時,并沒有指定IP地址和端口號,創(chuàng)建對象后還需調(diào)用connect(SocketAddressendpoint)方法,才能完成與指定服務(wù)器端的連接,其中參數(shù)endpoint用于封裝IP地址和端口號。Socket(Stringhost,intport)該構(gòu)造方法在創(chuàng)建Socket對象時,會根據(jù)參數(shù)去連接在指定地址和端口上運行的服務(wù)器程序,其中參數(shù)host接收的是一個字符串類型的IP地址。Socket(InetAddressaddress,intport)該方法在使用上與第2個構(gòu)造方法類似,參數(shù)address用于接收一個InetAddress類型的對象,該對象用于封裝一個IP地址。Socket——常用構(gòu)造方法TCP通信Socket——常用方法方法聲明功能描述intgetPort()該方法用于返回此Socket連接的遠程服務(wù)端的端口號InetAddressgetLocalAddress()該方法用于獲取Socket對象綁定的本地IP地址,并將IP地址封裝成InetAddress類型的對象返回voidclose()該方法用于關(guān)閉Socket連接,結(jié)束本次通信。在關(guān)閉Socket之前,應(yīng)將與Socket相關(guān)的所有的輸入/輸出流全部關(guān)閉,這是因為一個良好的程序應(yīng)該在執(zhí)行完畢時釋放所有的資源InputStreamgetInputStream()該方法返回一個InputStream類型的輸入流對象。如果該對象是由服務(wù)器端的Socket返回,就用于讀取客戶端發(fā)送的數(shù)據(jù);反之,用于讀取服務(wù)器端發(fā)送的數(shù)據(jù)OutputStreamgetOutputStream()該方法返回一個OutputStream類型的輸出流對象。如果該對象是由服務(wù)器端的Socket返回,就用于向客戶端發(fā)送數(shù)據(jù);反之,用于向服務(wù)器端發(fā)送數(shù)據(jù)TCP通信服務(wù)端與客戶端通信圖:TCP通信基于TCP協(xié)議的Socket通信的步驟:服務(wù)器:1、創(chuàng)建ServerSocket,綁定一個監(jiān)聽端口2、通過accept()方法監(jiān)聽客戶端請求3、建立連接后,通過輸入流讀取客戶端數(shù)據(jù),通過輸出流向客戶端發(fā)送數(shù)據(jù)4、關(guān)閉輸入/輸出流,關(guān)閉Socket客戶端:1、創(chuàng)建Socket,需要指明服務(wù)器的IP地址和端口號2、建立連接后,通過輸出流向服務(wù)器發(fā)送數(shù)據(jù),通過輸入流讀取服務(wù)器的響應(yīng)信息3、關(guān)閉輸入輸出流,關(guān)閉SocketTCP通信2.HTTP通信HTTP簡介HTTP全稱為超文本傳輸協(xié)議(HypertextTransferProtocol),是一種用于傳輸超文本(如網(wǎng)頁)的協(xié)議。它是在互聯(lián)網(wǎng)上應(yīng)用最廣泛的一種網(wǎng)絡(luò)協(xié)議。HTTP的工作方式是基于請求和響應(yīng)的模型。在一個HTTP請求-響應(yīng)周期中,一個客戶端(如一個瀏覽器)會向服務(wù)器發(fā)送一個請求,這個請求可以包含一個獲取特定資源(如一個網(wǎng)頁)的請求,也可以是提交其他類型數(shù)據(jù)的請求(如POST請求)。當服務(wù)器收到這個請求后,它會處理這個請求并返回一個響應(yīng)。這個響應(yīng)可以是一個網(wǎng)頁的內(nèi)容,也可以是其他類型的數(shù)據(jù),如錯誤消息或重定向指令等。HTTP簡介HTTP為瀏覽器和App們提供了一個統(tǒng)一的接口,大量的App都在使用HTTP及其相關(guān)協(xié)議,確保網(wǎng)頁和App能方便的進行通信。HTTP通常使用URL(UniformResourceLocator,統(tǒng)一資源定位地址)來請求數(shù)據(jù)或提交信息。URL是指向互聯(lián)網(wǎng)資源的指針,資源可以是簡單的文件或目錄,也可以是對更復(fù)雜的對象的引用,例如對數(shù)據(jù)庫或搜索引擎的查詢。通常情況下,URL由協(xié)議名、主機、端口和資源組成,其格式為:protocal://host:port/resourceName。HTTP簡介在客戶端與服務(wù)器進行網(wǎng)絡(luò)通信的過程中,通常需要提供一些參數(shù)以指定所需訪問的資源,不同的參數(shù)會導(dǎo)致請求不同的資源。在HTTP協(xié)議中,常用的請求類型主要有兩種,即GET和POST。這兩種請求類型在技術(shù)上的差異主要體現(xiàn)在瀏覽器或客戶端在處理和封裝請求信息時的方式上。HTTP簡介GET方法通常用于從服務(wù)器獲取資源,這種請求不會對服務(wù)器上的數(shù)據(jù)造成任何更改。在這種情況下,參數(shù)的主要作用是告知服務(wù)器哪些數(shù)據(jù)可以提供作為響應(yīng)。這些參數(shù)被附加到請求的URL后面。使用GET方法發(fā)送的URL長度通常不能超過1KB。在HTML頁面中,資源鏈接通常使用GET方法作為典型的實現(xiàn)方式。當使用POST請求方法提交數(shù)據(jù)時,所提交的數(shù)據(jù)以鍵值對的形式被封裝在請求的實體中。這種做法使得用戶無法通過瀏覽器直接查看發(fā)送的請求數(shù)據(jù)。因此,POST方式在安全性方面要比GET方式更為優(yōu)越。POST請求具有修改服務(wù)器端資源內(nèi)容的能力,例如處理表單、上傳文件等情況。HTTP簡介在請求過程中,提供給服務(wù)器的參數(shù)分為兩種主要類型:請求參數(shù)和控制參數(shù)。請求參數(shù)是與特定的業(yè)務(wù)和內(nèi)容相關(guān)的信息,例如網(wǎng)絡(luò)服務(wù)器的地址,它作為請求參數(shù)提供了服務(wù)器可達的地址信息。除此之外,附加的查詢字符串以及使用POST方式進行訪問時所附加的參數(shù)等也屬于請求參數(shù)的范疇??刂茀?shù)則主要用于從技術(shù)角度對訪問過程進行控制,如設(shè)置訪問超時時間、指定內(nèi)容編碼格式、向服務(wù)器提供當前訪問客戶端的類型等信息,都可以被歸類為控制參數(shù)。HTTP簡介Android平臺為HTTP通信提供了全面的支持,通過標準的Java類HttpURLConnection來實現(xiàn)基于URL的請求和響應(yīng)功能。HttpURLConnection繼承自URLConnection類,它可以發(fā)送和接收各種類型和長度的數(shù)據(jù),同時也可以靈活地設(shè)置請求方法、超時時間等參數(shù)。HTTP簡介在真實的開發(fā)過程中,當手機端與服務(wù)器端進行交互時,不可避免地需要將中文數(shù)據(jù)提交到服務(wù)器,此時可能會出現(xiàn)中文亂碼的問題。無論使用GET還是POST方法提交參數(shù),都需要對參數(shù)進行編碼。至關(guān)重要的是,編碼方式必須與服務(wù)器端的解碼方式保持一致。同樣,在獲取服務(wù)器返回的中文字符時,也需要使用特定的解碼格式進行解碼。HTTP的數(shù)據(jù)解析與顯示HTTP請求后返回的數(shù)據(jù)有多種類型,常見的有HTML、JSON、XML、純文本、圖片、適配、PDF等。HTML網(wǎng)頁的顯示HTML網(wǎng)頁是HTTP請求后返回的最常見的數(shù)據(jù)類型,Android提供了WebView控件來解析和顯示網(wǎng)頁。WebView控件和其他控件類似,可以直接在XML布局文件中添加,也可以在Java代碼中添加。HTML網(wǎng)頁的顯示W(wǎng)ebView控件的常用方法有:loadUrl(Stringurl):加載URL對應(yīng)的網(wǎng)頁。loadData(Stringdata,StringmimeType,Stringencoding):將指定的字符串數(shù)據(jù)加載到瀏覽器中。capturePicture():創(chuàng)建當前屏幕的快照。goBack():執(zhí)行后退操作。goForward():執(zhí)行前進操作。stopLoading():停止加載當前頁面。reload():重新加載當前頁面。zoomIn():放大網(wǎng)頁。zoomOut():縮小網(wǎng)頁。addJavascriptInterface(Objectobject,Stringname):使用WebView中的JavaScript調(diào)用Android方法。JSON數(shù)據(jù)的解析Android應(yīng)用很多時候不需要顯示網(wǎng)頁,只需要獲取數(shù)據(jù),將數(shù)據(jù)適配到Android的控件上。HTTP請求獲取的數(shù)據(jù)類型很多時候是JSON類型,JSON是一種新的數(shù)據(jù)格式,是一種輕量級的數(shù)據(jù)交互格式,JSON的文件拓展名一般為.json。JSON可以傳輸一個簡單的數(shù)據(jù),也可以傳輸數(shù)組或?qū)ο?。JSON數(shù)據(jù)有兩種結(jié)構(gòu),分別是對象結(jié)構(gòu)和數(shù)組結(jié)構(gòu)。JSON數(shù)據(jù)的解析(1)對象結(jié)構(gòu)對象結(jié)構(gòu)以“{”開始,以“}”結(jié)束,中間部分由以“,”分隔的鍵值對(key:value)構(gòu)成,最后一個鍵值對后邊不用加“,”,鍵(key)和值(value)之間以“:”分隔,以下是一個對象結(jié)構(gòu)的JSON數(shù)據(jù)示例:

上述JSON是一個對象結(jié)構(gòu),有三個鍵值對,其中“city”的值為“Suzhou”,“temp”的值為26,“weather”的值為“cloudy”。{"city":"Suzhou","temp":26,"weather":"cloudy"}

JSON數(shù)據(jù)的解析(2)數(shù)組結(jié)構(gòu)數(shù)組結(jié)構(gòu)以“[”開始,以“]”結(jié)束。中間部分由0個或多個以“,”分隔的對象(value)的列表組成,以下是一個數(shù)組結(jié)構(gòu)的示例:

JSON數(shù)組結(jié)構(gòu)中的數(shù)據(jù)類型可以不同,數(shù)組元素也可以是對象結(jié)構(gòu)的數(shù)據(jù):["abc",12345,false,null]

[

{

"city":"Suzhou",

"temp":26,

"weather":"cloudy"

},

{

"city":"Wuxi",

"temp":25,

"weather":"cloudy"

}

]

JSON數(shù)據(jù)的解析數(shù)組結(jié)構(gòu)和對象結(jié)構(gòu)可以相互嵌套,形成復(fù)雜的JSON結(jié)構(gòu)。值得注意的是,如果JSON僅存儲單個數(shù)據(jù),應(yīng)采用數(shù)組結(jié)構(gòu)而非對象結(jié)構(gòu),因為對象結(jié)構(gòu)必須以鍵值對的形式存在。JSON可以使用AndroidSDK自帶的JSONObject、JSONArray或第三方的Gso

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論