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