更新時間:2020-12-02 17:49:43 來源:動力節點 瀏覽1178次
Socket是計算機網絡中用于在節點內發送或接收數據的內部端點。具體來說,它是網絡軟件 (協議棧) 中這個端點的一種表示,包含通信協議、目標地址、狀態等,是系統資源的一種形式。但Socket由于其本身廣泛應用在通信領域,所以對于廣大的Java初學者甚至是大多數開發人員來說知之甚少,本文就來和大家聊一聊什么是Socket。
Socket起源于Unix,而Unix/Linux基本哲學之一就是“一切皆文件”,都可以用“打開open –> 讀寫write/read –> 關閉close”模式來操作。Socket就是該模式的一個實現, socket即是一種特殊的文件,一些socket函數就是對其進行的操作(讀/寫IO、打開、關閉). 說白了Socket是應用層與TCP/IP協議族通信的中間軟件抽象層,它是一組接口。在設計模式中,Socket其實就是一個門面模式,它把復雜的TCP/IP協議族隱藏在Socket接口后面,對用戶來說,一組簡單的接口就是全部,讓Socket去組織數據,以符合指定的協議。
Socket 的誕生是為了應用程序能夠更方便的將數據經由傳輸層來傳輸,所以它本質上就是對 TCP/IP 的運用進行了一層封裝,然后應用程序直接調用 socket API 即可進行通信。那么它是如何工作的呢?它分為 2 個部分,服務端需要建立 socket 來監聽指定的地址,然后等待客戶端來連接。而客戶端則需要建立 socket 并與服務端的 socket 地址進行連接。
Socket是通信的基石,是支持TCP/IP協議的路通信的基本操作單元。可以將套接字看作不同主機間的進程進行雙間通信的端點,它構成了單個主機內及整個網絡間的編程界面。套接字存在于通信域中,通信域是為了處理一般的線程通過套接字通信而引進的一種抽象概念。套接字通常和同一個域中的套接字交換數據(數據交換也可能穿越域的界限,但這時一定要執行某種解釋程序),各種進程使用這個相同的域互相之間用Internet協議簇來進行通信。
Socket(套接字)可以看成是兩個網絡應用程序進行通信時,各自通信連接中的端點,這是一個邏輯上的概念。它是網絡環境中進程間通信的API(應用程序編程接口),也是可以被命名和尋址的通信端點,使用中的每一個套接字都有其類型和一個與之相連進程。通信時其中一個網絡應用程序將要傳輸的一段信息寫入它所在主機的 Socket中,該 Socket通過與網絡接口卡(NIC)相連的傳輸介質將這段信息送到另外一臺主機的 Socket中,使對方能夠接收到這段信息。 Socket是由IP地址和端口結合的,提供向應用層進程傳送數據包的機制。
為了更方便地開發網絡應用程序,美國住克利大學在UNIX上推出了一種應用程序訪問通信協議的操作系統調用Socket。Socket的出現,使得程序員可以很方便地訪問 TCPIP,從而開發各種網絡應用程序。后來套接字被引進到 Windows等操作系統,成為開發網絡應用程序的有效工具。
看完以上的內容,我想大家一定知道什么是Socket了。總而言之Socket 是進程間數據傳輸的媒介,為了保證連接的可靠,你需要特別注意建立連接和關閉連接的過程。這中間就涉及到了建立 TCP/IP 連接的過程,經典的叫法為“三次握手”的過程。關于“三次握手”,在本站的Tomcat服務器教程中有著詳細的講解,感興趣的小伙伴可以前去觀看。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習