版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、網(wǎng)絡(luò)編程 :http 通信與 socket通信知識(shí)點(diǎn)概述 : 1.httpurlconnection 接口 :get 和 post 方式2.httpclient 接口 :get 和 post 方式3.socket 通信:面向連接 (tcp) 和無連接的 (udp) 知識(shí)點(diǎn)詳述 : 前序 :http通信http (超文本傳輸協(xié)議)用于傳送www 方式的數(shù)據(jù),采用了請(qǐng)求 /響應(yīng)模型。 客戶端向服務(wù)器發(fā)送一個(gè)請(qǐng)求,請(qǐng)求頭包含了請(qǐng)求的方法、uri、協(xié)議版本,以及包含請(qǐng)求修飾符、客戶信息和內(nèi)容的類似于mime 的消息結(jié)構(gòu)。服務(wù)器以一個(gè)狀態(tài)行作為響應(yīng),響應(yīng)的內(nèi)容包括消息協(xié)議的版本、成功或者錯(cuò)誤編碼,還包含
2、服務(wù)器信息、實(shí)體元信息以及可能的實(shí)體內(nèi)容。它是一個(gè)屬于應(yīng)用層的面向?qū)ο蟮膮f(xié)議,由于其簡(jiǎn)潔、快速,它適用于分布式超媒體信息系統(tǒng)。在 internet 上,http 通信通常發(fā)生在tcp/ip連接之上,缺省端口是tcp 80,但其他的端口也是可用的。這并不預(yù)示著http 協(xié)議在 internet或其它網(wǎng)絡(luò)的其他協(xié)議之上才能完成,http 只預(yù)示著一個(gè)可靠地傳輸。 android 提供了 httpurlconnection 和 httpclient接口來開發(fā)http 程序。1. httpurlconnection 接口.* 提供http通信中使用最多的就是get 和 post,get 請(qǐng)求可以獲取靜
3、態(tài)頁面,也可以把參數(shù)放在url字符串后面,傳遞給服務(wù)器。 post 與 get 的不同之處在于post 的參數(shù)不是放在url 字 符 串 里 面 , 而 是 放 在http請(qǐng) 求 數(shù) 據(jù) 中 。httpurlconnection 是 java的標(biāo)準(zhǔn)類,繼承自u(píng)rlconnection類,兩個(gè)類都是抽象類,無法直接實(shí)例化對(duì)象。其對(duì)象主要通過 url的 openconnection 方法獲得。每次 openconnection都將創(chuàng)建一個(gè)新的實(shí)例,在連接之前我們可以對(duì)其一些屬性進(jìn)行設(shè)置,比如超時(shí)時(shí)間等:connection.setdooutput(true); / 設(shè)置輸入流( post 時(shí)必須設(shè)
4、置)connection.setdoinput(true); / 設(shè)置輸出流(post 時(shí)必須設(shè)置)connection.setrequestmethod(post); / 設(shè)置方式為post(post 時(shí)必須設(shè)置)connection.setinstancefollowredirects(true); / 設(shè)置該請(qǐng)求是否重定向connection.disconnect(); / 關(guān)閉 httpurlconnection 連接注:如果使用post 方式,還需要設(shè)置請(qǐng)求的content-type connection.setrequestproperty(content-type,applica
5、tion/x-www-form-urlencoded); 2. httpclient 接口 (apache 接口 ,包名 :org.apache.http.*) ,需要了解一些類:(1)httpclient 使用 get 方式獲取數(shù)據(jù), 需要使用 httpget 來構(gòu)建一個(gè) get 方式的 http 請(qǐng)求,然后通過httpclient 來執(zhí)行這個(gè)請(qǐng)求, httpresponse 在接收這個(gè)請(qǐng)求后給出響應(yīng),最后通過“httpresponse.getstatusline().getstatuscode() 來判斷請(qǐng)求是否成功,并處理??梢灾苯邮褂萌缦路椒▽㈨憫?yīng)的實(shí)體元信息轉(zhuǎn)化為字符串strings
6、trresult = entityutils.tostring(httpresponse.getentity(); httpclient 的 get 方式請(qǐng)求步驟:封裝 httpget 請(qǐng)求new httpget (urlstr)獲取 httpclient 實(shí)例new defaulthttpclient () ;發(fā)送請(qǐng)求 ,接收響應(yīng)httpresponse = httpclient.excute(httpget) 判斷響應(yīng)碼是不是200.如果是 200,接收響應(yīng)數(shù)據(jù)httpentity =httpresponse.getentity(); httpclient 使用 post 方式獲取數(shù)據(jù)稍微
7、復(fù)雜一點(diǎn)。首先好使用 httppost 來構(gòu)建一個(gè)post 方式的 http 請(qǐng)求,httpposthttprequest=new httppost(url); 需要使用namevaluepair 來保存要傳遞的參數(shù),可以使用basicnamevaluepair 來構(gòu)造一個(gè)要被傳遞的參數(shù),然后通過add 方法添加這個(gè)參數(shù)到namevaluepair 中,listparams=new arraylist(); / 使用 namevaluepair 來保存要傳遞的post 參數(shù)params.add(new basicnamevaluepair(par,httpclient_android_post
8、); / 添加要傳遞的參數(shù)post 方式還需要設(shè)置所使用的字符集,最后就和get 方式一樣通過httpclient 來請(qǐng)求這個(gè)連接,返回響應(yīng)并處理,httpentityhttpentity=new urlencodedformentity(params,utf-8); / 設(shè)置字符集httprequest.setentity(httpentity); / 為請(qǐng)求設(shè)置實(shí)體元信息(2)defaulthttpclient是默認(rèn)的一個(gè)http 客戶端,我們可以使用它創(chuàng)建一個(gè)http連接。代碼如下: httpclienthc=new defaulthttpclient(); (3) httprespon
9、se 是一個(gè) http連接響應(yīng), 當(dāng)執(zhí)行一個(gè)http 連接后,就會(huì)返回一個(gè)httpresponse,可以通過其獲得一些響應(yīng)信息。下面是請(qǐng)求一個(gè)http 連接并獲得該請(qǐng)求是否成功的代碼:httpresponsehresponse=hc.execute(httprequest); if(hresponse.getstatusline().getstatuscode()=httpstatus.sc_ok) /連接成功 3 socket通信socket 稱為”套接字“,用于描述ip 地址和端口,它是支持 tcp/ip協(xié)議的網(wǎng)絡(luò)通信的基本操作單元。有兩種主要的操作方式: 面向連接 (tcp協(xié)議)和無連接
10、 (udp協(xié)議)的。面向連接的操作比無連接操作的效率更低,但是數(shù)據(jù)的安全性更高。android socket 編程(1)服務(wù)器實(shí)現(xiàn)步驟:指定端口實(shí)例化一個(gè)serversocket 調(diào)用 serversocket 的 accept()以在等待連接期間造成阻塞獲取位于該底層socket 的流以進(jìn)行讀寫操作將數(shù)據(jù)封裝成流對(duì) socket 進(jìn)行讀寫關(guān)閉打開的流(2)客戶端實(shí)現(xiàn)步驟:通過 ip地址和端口實(shí)例化socket,請(qǐng)求連接服務(wù)器獲取 socket 上的流以進(jìn)行讀寫把流包裝進(jìn)bufferedreader/printwriter的實(shí)例對(duì) socket 進(jìn)行讀寫關(guān)閉打開的流擴(kuò)展 :網(wǎng)絡(luò)通信的中文亂碼問題網(wǎng)絡(luò)通信中,產(chǎn)生亂碼的原因主要是通信過程中使用了不同的編碼方式: 服務(wù)器中的編碼方式,傳輸過程中的編碼方式,傳輸?shù)竭_(dá)中斷設(shè)備的編碼方式。因此在傳輸過程中就需要至少兩次編碼轉(zhuǎn)換:首先從服務(wù)器編碼轉(zhuǎn)換為網(wǎng)絡(luò)編碼,再從網(wǎng)絡(luò)編碼轉(zhuǎn)換為終端設(shè)備編碼。在轉(zhuǎn)換過程中發(fā)生任何情況都可能引起編碼混亂,一般情況下我們可以通過以下兩種方式來避免這個(gè)問題。一種方式是:由于大部分終端設(shè)備都支持unicode 字符集,所以在連接網(wǎng)頁時(shí),我們希望網(wǎng)頁數(shù)據(jù)在網(wǎng)絡(luò)傳輸時(shí)使用 utf-8 方式傳輸,這樣就可以很簡(jiǎn)單地將utf-8 轉(zhuǎn)換成unicode 字符集了。另一種
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年政府公共安全監(jiān)控技術(shù)合同范本3篇
- 2024年版建設(shè)項(xiàng)目招標(biāo)協(xié)調(diào)合同
- 三年級(jí)教學(xué)計(jì)劃3篇
- 員工工作計(jì)劃
- 2024-2030年中國羥甲煙胺片行業(yè)發(fā)展?jié)摿︻A(yù)測(cè)及投資戰(zhàn)略研究報(bào)告
- 服裝銷售工作計(jì)劃
- 學(xué)習(xí)部工作計(jì)劃4篇
- 去超市實(shí)習(xí)報(bào)告范文集合7篇
- 銀行員工辭職信
- 關(guān)于教師職稱述職報(bào)告匯編5篇
- 部編版語文四年級(jí)下冊(cè)第二單元大單元教學(xué)設(shè)計(jì)核心素養(yǎng)目標(biāo)
- 2024年小學(xué)教師聽課、評(píng)課制度
- 精品解析:河北省衡水市衡水中學(xué)2023-2024學(xué)年高一上學(xué)期期末數(shù)學(xué)試題(解析版)
- 2023年《鐵道概論》考試復(fù)習(xí)題庫附答案(含各題型)
- (電焊工)勞務(wù)分包合同
- 陜西省西安市西咸新區(qū)2023-2024學(xué)年七年級(jí)上學(xué)期1月期末歷史試題
- 北師大版數(shù)學(xué)三年級(jí)下冊(cè)全冊(cè)教案教學(xué)設(shè)計(jì)及教學(xué)反思
- 重難點(diǎn)06讀后續(xù)寫-2023年高考英語【熱點(diǎn)·重點(diǎn)·難點(diǎn)】(新高考專用)
- 眼科手術(shù)圍手術(shù)期的護(hù)理
- 人事行政主管打造高效團(tuán)隊(duì)提升員工滿意度實(shí)現(xiàn)人力資源的優(yōu)化管理和企業(yè)文化的建設(shè)
- 《腰椎穿刺術(shù)》課件
評(píng)論
0/150
提交評(píng)論