首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

什麼是 Socket?Java 網路程式設計的核心抽象

     編輯:Java 相關知識

Socket 概念:軟體層面的連線終端

Socket(套接字/插座)是軟體形式的抽象,表達兩台機器間連線的「終端」。對特定連線,每台機器各有一個 Socket,想像中間有一條虛擬「纜線」,兩端各插入一個 Socket。物理硬體與纜線連接細節完全未知——抽象的宗旨就是讓我們盡可能不需知道那些細節。

Java 中的 Socket 操作

在 Java 中建立 Socket 以建立與其他機器的連線。從 Socket 獲得 InputStream 與 OutputStream(配合轉換器可得 Reader/Writer),將連線視為 IO 流物件處理。

兩個基於串流的 Socket 類別:

  • ServerSocket:伺服器用於「偵聽」進入的連線
  • Socket:客戶端用於發起連線

客戶端申請連線後,ServerSocket 透過 accept() 回傳對應的伺服器端 Socket,雙方形成真正的「Socket-to-Socket」連線。此時兩端完全對稱,可用相同方式處理。利用 getInputStream()、getOutputStream() 產生對應串流,封裝進緩衝區,按第 10 章方法格式化,如同處理其他流物件。

命名混淆:ServerSocket 的誤導性

Java 庫命名機制中,ServerSocket 易產生誤解。許以為應叫 ServerConnector 或其他名字,不該含「Socket」。也可能以為兩者應繼承共同基底類。事實上它們確有幾個共同方法,但不足以構成共同基底類。

ServerSocket 真正任務: 耐心等待其他機器連線,再回傳一個實際的 Socket。命名不當在於:它的目標不是成為 Socket,而是在他人連線時產生 Socket 物件。

然而,ServerSocket 確實在主機上建立物理「伺服器」或偵聽 Socket。此 Socket 偵聽連線請求,透過 accept() 回傳「已建立」Socket(本地與遠端端點均已定義)。混淆點在於:偵聽 Socket 與已建立 Socket 都關聯同一個 ServerSocket。偵聽 Socket 只能接受新連線請求,不能接收實際資料封包。所以雖 ServerSocket 對編程意義不大,但它確實是「物理性」的。

建立參數差異

  • 建立 ServerSocket: 僅需指定連接埠號。不需 IP 位址,因它就在該機器上
  • 建立 Socket: 必須同時給予 IP 位址與連接埠號
  • 從 ServerSocket.accept() 回傳的 Socket: 已包含所有資訊
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved