標籤:
通訊端(socket)為兩台電腦之間的通訊提供了一種機制,在 James Gosling 注意到 Java 語言之前,通訊端就早已赫赫有名。為了能夠方便開發網路應用程式,Unix系統推出了一種應用程式訪問通訊協定的作業系統調用——Socket通訊端,使得程式員很方便的訪問TCP/IP協議,從而開發各種網路應用程式。後來Windows也引入Socket,Java語言也引入了通訊端的編程模型。
多數程式員,不管他們是否使用 Java 語言進行編碼,都不想很多知道關於不同電腦上的應用程式彼此間如何通訊的低級細節。程式員們希望處理更容易理解的更進階抽象。Java 程式員希望能用他們熟悉的 Java 構造,通過直觀介面與對象互動。通訊端在兩個領域中都存在 ― 我們寧願避開的低級細節和我們更願處理的抽象層。本教程討論的低級細節將只限於理解抽象應用程式所必須的部分。
通訊端大致駐留在 OSI 模型的會話層。會話層夾在其上面嚮應用的層和其下的即時資料通訊層之間。會話層為兩台電腦 之間的資料流提供管理和控制服務。作為該層的一部分,通訊端提供一個隱藏從導線上擷取位元和位元組的複雜性的抽象。換句話說,通訊端允許我們讓應用程式表明 它想發送一些位元組即可傳輸資料。通訊端隱藏了完成該項工作的具體細節。
一般而言,Java 語言中的通訊端有以下兩種形式:
- TCP 通訊端(由
Socket
類實現,稍後我們將討論這個類)
- UDP 通訊端(由
DatagramSocket
類實現)
TCP 和 UDP 扮演相同角色,但做法不同。兩者都接收傳輸協議資料包並將其內容向前傳送到展示層。TCP 把訊息分解成資料包(資料報,datagrams)並在接收端以正確的順序把它們重新裝配起來。TCP 還處理對遺失資料包的重傳請求。有了 TCP,位於上層的層要擔心的事情就少多了。UDP 不提供裝配和重傳請求這些功能。它只是向前傳送資訊包。位於上層的層必須確保訊息是完整的並且是以正確的順序裝配的。
一般而言,UDP 強加給您的應用程式的效能開銷更小,但只在應用程式不會突然交換大量資料並且不必裝配大量資料報以完成一條訊息的時候。否則,TCP 才是最簡單或許也是最高效的選擇。因為多數讀者都喜歡 TCP 勝過 UDP,所以我們將把討論限制在 Java 語言中面向 TCP 的類。
《JAVA通訊端》