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