1. 程式人生 > >Java網路教程-基礎

Java網路教程-基礎

原文地址   譯者:賈毅  校對:方騰飛

Java提供了非常易用的網路API,呼叫這些API我們可以很方便的通過建立TCP/IP或UDP套接字,在網路之間進行相互通訊,其中TCP要比UDP更加常用,但在本教程中我們對這兩種方式都有說明。

在網站上還有其他三個與Java網路相關的教程,如下:

儘管Java網路API允許我們通過套接字(Socket)開啟或關閉網路連線,但所有的網路通訊均是基於Java IO類 InputStreamOutputStream實現的。

此外,我們還可以使用Java NIO API中相關的網路類,用法與Java網路API基本類似,Java NIO API可以以非阻塞模式工作,在某些特定的場景中使用非阻塞模式可以獲得較大的效能提升。

Java TCP網路基礎

通常情況下,客戶端開啟一個連線到伺服器端的TCP/IP連線,然後客戶端開始與伺服器之間通訊,當通訊結束後客戶端關閉連線,過程如下圖所示:

​客戶端通過一個已開啟的連線可以傳送不止一個請求。事實上在伺服器處於接收狀態下,客戶端可以傳送儘可能多的資料,伺服器也可以主動關閉連線。

JavaSocket類和ServerSocket

當客戶端想要開啟一個連線到伺服器的TCP/IP連線時,就要使用到Java Socket類。socket類只需要被告知連線的IP地址和TCP埠,其餘的都有Java實現。

假如我們想要開啟一個監聽服務,來監聽客戶端連線某些指定TCP埠的連線,那就需要使用

Java ServerSocket類。當客戶端通過Socket連線伺服器端的ServerSocket監聽時,伺服器端會指定這個連線的一個Socket,此時客戶端與伺服器端間的通訊就變成Socket與Socket之間的通訊。

關於Socket類和ServerSocket類會在後面的文章中有詳細的介紹。

Java UDP網路基礎

UDP的工作方式與TCP相比略有不同。使用UDP通訊時,在客戶端與伺服器之間並沒有建立連線的概念,客戶端傳送到伺服器的資料,伺服器可能(也可能並沒有)收到這些資料,而且客戶端也並不知道這些資料是否被伺服器成功接收。當伺服器向客戶端傳送資料時也是如此。

正因為是不可靠的資料傳輸,UDP相比與TCP來說少了很多的協議開銷。

在某些場景中,使用無連線的UDP要優於TCP,這些在文章Java UDP DatagramSocket類介紹中會有更多介紹。