Android 實現聯網(四)——TCP/UDP

 

java.net漫遊 篇幅 中,我們詳細介紹了與網絡相關的基礎類,本篇幅我們詳細介紹TCP、UDP,以及如何在Android 實現聯網中使用TCP、UDP協議。

TCP(Transmission Control Protocol:傳輸控制協議)

TCP模型結構圖,如下圖所示:

TCP-M

服務器端與客戶端的交互圖,如下圖所示:

TCP-Seq

對上圖,解釋如下

  • 服務器程序編寫
  1. 調用ServerSocket(int port)創建一個服務器套接字,並綁定到指定端口上;
  2. 調用accept(),監聽連接請求,如果客戶端請求連接,則接受連接,返回通信套接字;
  3. 調用Socket類的getOutputStream()和getInputStream()獲取輸出和輸入流,開始網絡數據的發送和接收;
  4. 最後關閉通信套接字。
  • 客戶端程序編寫
  1. 調用Socket()創建一個流套接字,並連接到服務器端;
  2. 調用Socket類的getOutputStream()和getInputStream()獲取輸出和輸入流,開始網絡數據的發送和接收;
  3. 關閉通信套接字。

具體如何使用的例子,相信大家已經看了很多了,在這裏就不詳細說明了。

UDP (User DataPram Protocol:用戶數據報協議)

UDP模型結構圖,如下圖所示:

UDP-M

服務器端與客戶端的交互圖,如下圖所示:

UDP-Sep

對上圖,解釋如下:

  • 接收端程序編寫:
  1. 調用DatagramSocket (int port)創建一個數據報套接字,並綁定到指定端口上;
  2. 調用DatagramPacket(byte[] buf,int length),建立一個字節數組以接收UDP包;
  3. 調用DatagramSocket類的receive(),接受UDP包;
  4. 最後關閉數據報套接字。
  • 發送端程序編寫:
  1. 調用DatagramSocket()創建一個數據包套接字;
  2. 調用DatagramPacket(byte[] buf,int offset,int length,InetAddress address,int port),建立要發送的UDP包;
  3. 調用DatagramSocket類的send()發送UDP包;
  4. 最後關閉數據報套接字。

下面舉個具體的例子,通過send()/recv()分別實現數據報的發送與接受,如下圖所示:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章