android培訓6、網(wǎng)絡(luò)通信編程_第1頁
android培訓6、網(wǎng)絡(luò)通信編程_第2頁
android培訓6、網(wǎng)絡(luò)通信編程_第3頁
android培訓6、網(wǎng)絡(luò)通信編程_第4頁
android培訓6、網(wǎng)絡(luò)通信編程_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Android網(wǎng)絡(luò)通信技術(shù)手機端本章目標手機網(wǎng)絡(luò)通信方式Java標準-URL/HttpURLConnectionApache HTTP通信接口-HttpClientWebView以及應用程序和網(wǎng)頁交互*Wifi通信*BlueTooth通信網(wǎng)絡(luò)通信層次圖WiFi模塊GSM模塊BlueToothLINUX TCP/IP 協(xié)議棧BlueZDalvik以及API連接管理及控制服務(wù)JAVA用戶層Android核心層Linux內(nèi)核層 .*org.apache.http.*java.nio.*TCP/IP 協(xié)議棧協(xié)議棧的作用?TCP/IP 協(xié)議棧的分層以及作用?傳輸層的協(xié)議端口概念?TCP/IP 協(xié)議棧與

2、SOCKET APITCP/IP 協(xié)議棧中應用層協(xié)議有哪些?接下來為傳輸層 TCP 協(xié)議的相關(guān)知識TCP 報文段格式圖1 TCP報文段格式圖2 數(shù)據(jù)偽報文頭格式建鏈過程中的“三次握手”注意:利用兩次握手,完成對服務(wù)器的攻擊,狀態(tài):syn_recv關(guān)閉鏈路的四次握手注意:利用兩或三次握手,造成服務(wù)器資源的消耗;另外,在無線通訊過程中,客戶端關(guān)閉連接后,過早關(guān)閉鏈路,也會造成服務(wù)器的資源回收不及時,time_wait狀態(tài)熟記在心HTTP 協(xié)議基于TCP的WEB應用協(xié)議客戶端或瀏覽器發(fā)起一次request請求post get head put服務(wù)端根據(jù)請求進行應答response數(shù)據(jù)被客戶端接收后,

3、服務(wù)端關(guān)閉連接則完成一次交互HTTP報文由兩個部分構(gòu)成:HTTP包頭HTTP包體即正文部分HTTP 分析-1GET請求頭HTTP應答頭GET 路徑/文件名 HTTP/1.1HTTP/1.1 狀態(tài)碼 錯誤信息Content-Type: (類型)Content-length:(包體長度)回車換行回車換行HTTP 分析-2POST請求頭POST /WebProj/main.jsp HTTP/1.1Accept: application/x-shockwave-flash, image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/vnd

4、.ms-excel, application/vnd.ms-powerpoint, application/msword, application/xaml+xml, application/x-ms-xbap, application/x-ms-application, */*Referer: Accept-Language: zh-cnUser-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.2; .NET CLR 2.0.50727; .NET4.0C)Content-Type

5、: application/x-www-form-urlencodedAccept-Encoding: gzip, deflateHost: localhost:8080Content-Length: 35Connection: Keep-AliveCache-Control: no-cacheCookie: JSESSIONID=4B17A9F74CE01E60DB890D7E75E00D1EtextAccountNumber=1001&textPwd=1111消息報頭提交的消息數(shù)據(jù)CRLF(回車),表示消息頭結(jié)束HttpURLConnection普通URL請求URL/HttpURLConn

6、ectionURL url = new URL(“ ”);HttpURLConnection conn = (HttpURLConnection)url.openConnection();if(conn.getResponseCode ()=HttpURLConnection.HTTP_OK)InputStream is = conn.getInputStream(); .看示例1: NetDemoServlet(Web 項目)啟動 NetDemo_1 (Android 項目) .ClientDemo1HttpURLConnection Post 請求-頭String BOUNDARY = j

7、ava.util.UUID.randomUUID().toString(); String PREFIX = - , LINEND = rn; String MULTIPART_FROM_DATA = multipart/form-data; String CHARSET = UTF-8; conn.setReadTimeout(5 * 1000); / 緩存的最長時間 conn.setDoInput(true);/ 允許輸入 conn.setDoOutput(true);/ 允許輸出 conn.setUseCaches(false); / 不允許使用緩存 conn.setRequestMet

8、hod(POST); conn.setRequestProperty(connection, keep-alive); conn.setRequestProperty(Charsert, UTF-8); conn.setRequestProperty(Content-Type, MULTIPART_FROM_DATA + ;boundary= + BOUNDARY);HttpURLConnection Post 請求-數(shù)據(jù)DataOutputStream outStream = new DataOutputStream(conn.getOutputStream(); /發(fā)送文件數(shù)據(jù) Strin

9、gBuilder sb1 = new StringBuilder(); sb1.append(PREFIX); sb1.append(BOUNDARY); sb1.append(LINEND); sb1.append(Content-Disposition: form-data; name=file1; filename=+FileName+LINEND); sb1.append(Content-Type: application/octet-stream; charset=+CHARSET+LINEND); sb1.append(LINEND); outStream.write(sb1.to

10、String().getBytes(); /讀文件 InputStream is = new FileInputStream(FileName); byte buffer = new byte1024; int len = 0; while (len = is.read(buffer) != -1) outStream.write(buffer, 0, len); is.close(); outStream.write(LINEND.getBytes(); /請求結(jié)束標志 byte end_data = (PREFIX + BOUNDARY + PREFIX + LINEND).getByte

11、s(); outStream.write(end_data); outStream.flush(); 使用總結(jié)1、HttpURLConnection的connect()函數(shù),實際上只是建立了一個與服務(wù)器的tcp連接,并沒有實際發(fā)送http請求。無論是post還是get,http請求實際上直到HttpURLConnection的getInputStream()這個函數(shù)或其它獲取響應信息的方法,才正式發(fā)送出去在用POST方式發(fā)送URL請求時,URL請求參數(shù)的設(shè)定位置是重中之重,對connection對象的一切配置都必須要在connect()函數(shù)執(zhí)行之前完成對outputStream的寫操作,又必須

12、要在inputStream的讀操作之前connect()函數(shù)會根據(jù)HttpURLConnection對象的配置值生成http頭部信息http頭后面緊跟著的是http請求的正文,正文的內(nèi)容是通過outputStream流輸出的Http 相關(guān)類URLEncoderString static encode(String url,String env);將url中非az,09的字符進行重新編碼URLDecoderString static decode(String url,String env);將編碼后的字符串解碼看示例: HttpWebServer項目com.great.http.URLEnco

13、der_URLDecoder_Demo1Apache Http 網(wǎng)絡(luò)類HttpClienthttp操作對象 execute則發(fā)起請求HttpGet/HttpPost構(gòu)造get/post請求HttpResponse應答對象Header getAllHeadersHttpEntity getEntityHttpParams getParamsStatusLine getStatusLineApache HTTP 包相關(guān)類HttpHeaderHTTP協(xié)議頭HttpEntityHTTP包體HttpParamsHTTP協(xié)議的參數(shù)RequestLine請求頭中請求行StatusLine 應答頭中狀態(tài)行Na

14、meValuePair/BasicNameValuePair 鍵值對UrlEncodedFormEntity構(gòu)造HttpEntity實體看示例1: NetDemoServlet(Web 項目)啟動 NetDemo_1 (Android 項目) .ClientDemo1Apache HTTP 包工具類org.apache.http.utils.*EntityUtils實體工具類EncodingUtils編碼工具類看示例1: NetDemoServlet(Web 項目)啟動 NetDemo_1 (Android 項目) .ClientDemo1apache Http 示例tryHttpClient

15、 httpClient = new DefaultHttpClient();HttpGet get = new HttpGet(“ ”);HttpResponse res = httpClient.execute(get);if(res.getStatusLine().getStatusCode=HttpStatus.SC_OK)InputStream is = res.getEntity.getContent();catch(IOException ioe)WebViewWebView 處理HTML內(nèi)容的控件,類似于瀏覽器loadUrl(String url); 裝載網(wǎng)頁loadData(S

16、tring data);裝載數(shù)據(jù)loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl);裝載數(shù)據(jù)看示例:NetDemo1項目 .WebView_Demo1WebViewClient用來接收/處理來自網(wǎng)頁的各種通知或事件setWebViewClient(new WebViewClient();請查閱WebViewClient接口WebChromeClient用來處理網(wǎng)頁JS對話框、 favicons(瀏覽器地址欄左側(cè)的那個小圖標) 、Title、進度

17、條等等setWebChromeClient(new WebChromeClient();請查閱WebChromeClient接口WebView 與網(wǎng)頁內(nèi)容WebView和JavaScript交互,達到控制網(wǎng)頁的目的webView.getSettings.setJavaScriptEnabled(true);webView.addJavaScriptInterface(Object object,String interfaceName);在js中,erfaceName.getInterfaceName()即可得到Java對象看示例:NetDemo1項目 .WebView_Demo2WifiSc

18、anResult描述已經(jīng)檢測出的接入點(地址、名稱、認證、頻率、信號強度等)WifiConfiguationWifi網(wǎng)絡(luò)的配置WifiManagerWifi管理服務(wù)WifiManager.WifiLockWifiManager方法說明addNetwork添加一個已經(jīng)配置好的網(wǎng)絡(luò)連接caculateSignalLevel計算信號強度createWifiLockdisableNetwork/enableNetworkdisconnectgetConfiguredNetwork獲取已經(jīng)配置好的網(wǎng)絡(luò)連接列表getScanResultgetConnectionInfo得到正在使用的連接的信息startS

19、can掃描存在的接入點updateNetwork更新網(wǎng)絡(luò)reassociate重新連接管理和控制 Wifi需要申請的權(quán)限ACCESS_WIFI_STATEWAKE_LOCKCHANGE_WIFI_STATE連接通道管理Android默認Wifi連接,當沒有wifi通道時,使用gprs通道ConnectivityManagerContext.getSystemService(Context.CONNECTIVITY_SERVICE)監(jiān)控網(wǎng)絡(luò)連接(Wi-Fi, GPRS, UMTS, etc.)當網(wǎng)絡(luò)連接發(fā)生改變時,發(fā)出broadcast intents;ACTION_BACKGROUND_DAT

20、A_SETTING_CHANGED 后臺參數(shù)設(shè)置被更改CONNECTIVITY_ACTION 連接發(fā)生改變時提供api函數(shù)讓用戶獲取連接的信息,例如:NetworkInfo netInfo = getAvailableNetworkInfo()看示例:NetDemo1項目 workInfo_Demo1Bluetooth 藍牙BluetoothAdapter本地藍牙設(shè)備的適配類,所有的藍牙操作都要通過該類完成BluetoothClass藍牙設(shè)備類,代表了藍牙通訊過程中的遠端設(shè)備BluetoothClass.DeviceBluetoothClass.Device.MajorBluetoothCla

21、ss.ServiceBluetoothDevice藍牙設(shè)備類,代表了藍牙通訊過程中的遠端設(shè)備Bluetooth 通信BluetoothServerSocket服務(wù)器通訊套接字,與TCP ServerSocket類似BluetoothSocket藍牙通訊套接字,代表了與遠端設(shè)備的連接點,使用socket本地程序可以通過inputstream和outputstream與遠端程序進行通訊藍牙的操作步驟(1)-打開藍牙1、讓應用程序獲得藍牙操作權(quán)限2、獲得藍牙對象,判斷藍牙是否允許使用以及是否打開mBluetoothAdapter = BluetoothAdapter.getDefaultAdapte

22、r(); mBluetoothAdapter.enable()允許使用 ,不提示mBluetoothAdapter.isEnabled()或startActivity(new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE),REQUEST_ENABLE_BT); 該方法會給用戶提示藍牙的操作步驟(2)-搜尋藍牙設(shè)備獲取已經(jīng)配對的藍牙設(shè)備Set pairedDevices = mBluetoothAdapter.getBondedDevices();搜尋藍牙設(shè)備mBluetoothAdapter.startDiscovery(),異步操作/ Crea

23、te BroadcastReceiver for ACTION_FOUNDprivate final BroadcastReceiver mReceiver = new BroadcastReceiver() public void onReceive(Context context, Intent intent) String action = intent.getAction(); if (BluetoothDevice.ACTION_FOUND.equals(action) /從Intent中獲取藍牙設(shè)備 BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTR

溫馨提示

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

評論

0/150

提交評論