閱讀405 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Java網絡教程-基礎

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

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

1.Java IO 教程

2.Java NIO 教程

3.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類介紹中會有更多介紹。

 

最後更新:2017-05-23 17:32:26

  上一篇:go  企業網站推廣需要注意什麼?
  下一篇:go  並發已不再是語言層麵上的事情了