天天看點

Java網絡教程-基礎

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

java提供了非常易用的網絡api,調用這些api我們可以很友善的通過建立tcp/ip或udp套接字,在網絡之間進行互相通信,其中tcp要比udp更加常用,但在本教程中我們對這兩種方式都有說明。

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

1.java io 教程

2.java nio 教程

3.java伺服器多線程教程 (參與翻譯可以聯系我們)

盡管java網絡api允許我們通過套接字(socket)打開或關閉網絡連接配接,但所有的網絡通信均是基于java io類 inputstream和outputstream實作的。

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

java tcp網絡基礎

通常情況下,用戶端打開一個連接配接到伺服器端的tcp/ip連接配接,然後用戶端開始與伺服器之間通信,當通信結束後用戶端關閉連接配接,過程如下圖所示:

Java網絡教程-基礎

​用戶端通過一個已打開的連接配接可以發送不止一個請求。事實上在伺服器處于接收狀态下,用戶端可以發送盡可能多的資料,伺服器也可以主動關閉連接配接。

java中socket類和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類介紹中會有更多介紹。