在java.net漫遊 篇幅 中,我們詳細介紹了與網絡相關的基礎類,本篇幅我們詳細介紹TCP、UDP,以及如何在Android 實現聯網中使用TCP、UDP協議。
TCP(Transmission Control Protocol:傳輸控制協議)
TCP模型結構圖,如下圖所示:
服務器端與客戶端的交互圖,如下圖所示:
對上圖,解釋如下
- 服務器程序編寫
- 調用ServerSocket(int port)創建一個服務器套接字,並綁定到指定端口上;
- 調用accept(),監聽連接請求,如果客戶端請求連接,則接受連接,返回通信套接字;
- 調用Socket類的getOutputStream()和getInputStream()獲取輸出和輸入流,開始網絡數據的發送和接收;
- 最後關閉通信套接字。
- 客戶端程序編寫
- 調用Socket()創建一個流套接字,並連接到服務器端;
- 調用Socket類的getOutputStream()和getInputStream()獲取輸出和輸入流,開始網絡數據的發送和接收;
- 關閉通信套接字。
具體如何使用的例子,相信大家已經看了很多了,在這裏就不詳細說明了。
UDP (User DataPram Protocol:用戶數據報協議)
UDP模型結構圖,如下圖所示:
服務器端與客戶端的交互圖,如下圖所示:
對上圖,解釋如下:
- 接收端程序編寫:
- 調用DatagramSocket (int port)創建一個數據報套接字,並綁定到指定端口上;
- 調用DatagramPacket(byte[] buf,int length),建立一個字節數組以接收UDP包;
- 調用DatagramSocket類的receive(),接受UDP包;
- 最後關閉數據報套接字。
- 發送端程序編寫:
- 調用DatagramSocket()創建一個數據包套接字;
- 調用DatagramPacket(byte[] buf,int offset,int length,InetAddress address,int port),建立要發送的UDP包;
- 調用DatagramSocket類的send()發送UDP包;
- 最後關閉數據報套接字。
下面舉個具體的例子,通過send()/recv()分別實現數據報的發送與接受,如下圖所示: