Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android基本功:Socket

Android基本功:Socket

編輯:關於Android編程

一、TCP/IP協議基礎

  • IP協議:保證計算機能發送和接收分組數據,用戶網絡尋址,負責將消息從一個主機傳送到另一主機,消息發送的時候被分割成一個個小包;

  • TCP協議:負責收集這些信息,並將其按適當的次序放好傳送,在接收端收到後再正確地還原,並通過重發機制保證了數據在傳送的過程中准確無誤;

  • 在通信的兩端建立一個Socket,從在通信的兩端之間建立虛擬的鏈路進行通信;

    二、使用ServerSocket創建TCP服務器端

    • 建立了鏈路之後並沒有服務端和客戶端之分,在建立鏈路之前,必須有一個通信實體做出“主動姿態”接收其它通信實體的連接;

    • ServerSocket用來監聽來自客戶端的Socket連接,如果沒有連接,它一直處於等待狀態;

      • Socket accept()方法:監聽客戶端的連接請求,如果接收到返回一個Socket對象與連接客戶端Socket對應的Socket(通常通過不斷的循環調用ServerSocket的accept()方法);

      • 提供了如下幾個構造方法:

        • ServerSocket(int port)方法:用指定端口port來創建一個ServerSocket,該端口應該是一個有效的端口數值:0~65535(綁定默認的IP,通常綁定1024以上的端口,為了避免和其它程序的沖突);

        • ServerSocket(int port,int backlog)方法:增加了一個用來改變隊列長度的參數backlog;

        • SetverSocket(int port,int backlog,InetAddress localAddr):在機器存在多個IP的情況下,允許通過localAddr這個參數來指定將ServerSocket綁定到指定的Ip地址;

        • 當ServerSocket使用完畢後,應使用ServerSocket的close()方法關閉該ServerSocket;

          三、使用Socket進行通信

          • 客戶端通常使用Socket的構造器來連接指定的服務器,提供了如下幾個構造方法:

            • Socket(inetAddress/String remoteAddress,int port):創建到指定遠程主機,遠程端口的Socket(默認使用本地默認IP);

            • Socket(intAddress/String remoteAddress,int port,InetAddress localAddr,int localPort):創建連接到指定遠程主機、遠程端口的Socket,並指定本地的IP地址和本地的端口(適用於本地多個IP地址的情形);

            • 當構造Socket對象後,就會連接指定服務器,讓服務器端的ServerSocket的accept()方法執行,產生一對相互連接的Socket;

              • 當客戶端和服務端產生了對應的Socket之後,程序在無須區分客戶端和服務端,而是通過各種的Socket進行通信,Socket提供了如下兩個方法來獲取輸入流和輸出流:

                • InputStream getInputStream()方法:返回該Socket對象對應的輸入流,讓程序通過該輸入流從Socket讀取數據;

                • OutputStream getOutputStream()方法:返回該Socket對象對應的輸出流,讓程序通過該輸出流向Socket輸出數據;

                • 在實際應用中,程序可能不像讓執行網絡連接、讀取服務器數據一直阻塞,而是希望網絡連接、讀取操作超過合理事件後,系統自定認為操作失敗,即超時時長,提供了一個setToTimeout(int timeout)來設置超時時長;

                  • 加入多線程:

                    • 在服務端,為accept()方法產生的每個Socket創建一個單獨的線程ServerThread(Socket socket)處理與客戶端的通信;

                    • 在客戶端,為通信的Socket單獨建立一個線程,通過連個Handler分別將接受服務器的消息發送給主線程,將主頁面輸入的信息發送到單獨線程中;

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved