最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

科學(xué)知識(shí):理解socket

 更新時(shí)間:2015年05月18日 08:52:32   投稿:junjie  
這篇文章主要介紹了科學(xué)知識(shí):理解socket,本文試圖用簡(jiǎn)潔的語言說清楚socket的相關(guān)知識(shí),以便理解,需要的朋友可以參考下

網(wǎng)絡(luò)上的兩個(gè)程序通過一個(gè)雙向的通信連接實(shí)現(xiàn)數(shù)據(jù)的交換,這個(gè)連接的一端稱為一個(gè)socket。

Socket的英文原義是"孔"或"插座"。作為BSD UNIX的進(jìn)程通信機(jī)制,取后一種意思。通常也稱作"套接字",用于描述IP地址和端口,是一個(gè)通信鏈的句柄,可以用來實(shí)現(xiàn)不同虛擬機(jī)或不同計(jì)算機(jī)之間的通信。在Internet上的主機(jī)一般運(yùn)行了多個(gè)服務(wù)軟件,同時(shí)提供幾種服務(wù)。每種服務(wù)都打開一個(gè)Socket,并綁定到一個(gè)端口上,不同的端口對(duì)應(yīng)于不同的服務(wù)。Socket正如其英文原意那樣,像一個(gè)多孔插座。一臺(tái)主機(jī)猶如布滿各種插座的房間,每個(gè)插座有一個(gè)編號(hào),有的插座提供220伏交流電, 有的提供110伏交流電,有的則提供有線電視節(jié)目。 客戶軟件將插頭插到不同編號(hào)的插座,就可以得到不同的服務(wù)。

socket非常類似于電話插座。以一個(gè)國(guó)家級(jí)電話網(wǎng)為例。電話的通話雙方相當(dāng)于相互通信的2個(gè)進(jìn)程,區(qū)號(hào)是它的網(wǎng)絡(luò)地址;區(qū)內(nèi)一個(gè)單位的交換機(jī)相當(dāng)于一臺(tái)主機(jī),主機(jī)分配給每個(gè)用戶的局內(nèi)號(hào)碼相當(dāng)于socket號(hào)。任何用戶在通話之前,首先要占有一部電話機(jī),相當(dāng)于申請(qǐng)一個(gè)socket;同時(shí)要知道對(duì)方的號(hào)碼,相當(dāng)于對(duì)方有一個(gè)固定的socket。然后向?qū)Ψ綋芴?hào)呼叫,相當(dāng)于發(fā)出連接請(qǐng)求(假如對(duì)方不在同一區(qū)內(nèi),還要撥對(duì)方區(qū)號(hào),相當(dāng)于給出網(wǎng)絡(luò)地址)。對(duì)方假如在場(chǎng)并空閑(相當(dāng)于通信的另一主機(jī)開機(jī)且可以接受連接請(qǐng)求),拿起電話話筒,雙方就可以正式通話,相當(dāng)于連接成功。雙方通話的過程,是一方向電話機(jī)發(fā)出信號(hào)和對(duì)方從電話機(jī)接收信號(hào)的過程,相當(dāng)于向socket發(fā)送數(shù)據(jù)和從socket接收數(shù)據(jù)。通話結(jié)束后,一方掛起電話機(jī)相當(dāng)于關(guān)閉socket,撤消連接。

在電話系統(tǒng)中,一般用戶只能感受到本地電話機(jī)和對(duì)方電話號(hào)碼的存在,建立通話的過程,話音傳輸?shù)倪^程以及整個(gè)電話系統(tǒng)的技術(shù)細(xì)節(jié)對(duì)他都是透明的,這也與socket機(jī)制非常相似。socket利用網(wǎng)間網(wǎng)通信設(shè)施實(shí)現(xiàn)進(jìn)程通信,但它對(duì)通信設(shè)施的細(xì)節(jié)毫不關(guān)心,只要通信設(shè)施能提供足夠的通信能力,它就滿足了。

至此,我們對(duì)socket進(jìn)行了直觀的描述。抽象出來,socket實(shí)質(zhì)上提供了進(jìn)程通信的端點(diǎn)。進(jìn)程通信之前,雙方首先必須各自創(chuàng)建一個(gè)端點(diǎn),否則是沒有辦法建立聯(lián)系并相互通信的。正如打電話之前,雙方必須各自擁有一臺(tái)電話機(jī)一樣。在網(wǎng)間網(wǎng)內(nèi)部,每一個(gè)socket用一個(gè)半相關(guān)描述:

(協(xié)議,本地地址,本地端口)

一個(gè)完整的socket有一個(gè)本地唯一的socket號(hào),由操作系統(tǒng)分配。

最重要的是,socket 是面向客戶/服務(wù)器模型而設(shè)計(jì)的,針對(duì)客戶和服務(wù)器程序提供不同的socket 系統(tǒng)調(diào)用??蛻綦S機(jī)申請(qǐng)一個(gè)socket (相當(dāng)于一個(gè)想打電話的人可以在任何一臺(tái)入網(wǎng)電話上撥號(hào)呼叫),系統(tǒng)為之分配一個(gè)socket號(hào);服務(wù)器擁有全局公認(rèn)的 socket ,任何客戶都可以向它發(fā)出連接請(qǐng)求和信息請(qǐng)求(相當(dāng)于一個(gè)被呼叫的電話擁有一個(gè)呼叫方知道的電話號(hào)碼)。

socket利用客戶/服務(wù)器模式巧妙地解決了進(jìn)程之間建立通信連接的問題。服務(wù)器socket 半相關(guān)為全局所公認(rèn)非常重要。讀者不妨考慮一下,兩個(gè)完全隨機(jī)的用戶進(jìn)程之間如何建立通信?假如通信雙方?jīng)]有任何一方的socket 固定,就好比打電話的雙方彼此不知道對(duì)方的電話號(hào)碼,要通話是不可能的。

所謂socket通常也稱作"套接字",應(yīng)用程序通常通過"套接字"向網(wǎng)絡(luò)發(fā)出請(qǐng)求或者應(yīng)答網(wǎng)絡(luò)請(qǐng)求。以J2SDK-1.3為例,Socket和ServerSocket類庫(kù)位于java .net包中。ServerSocket用于服務(wù)器端,Socket是建立網(wǎng)絡(luò)連接時(shí)使用的。在連接成功時(shí),應(yīng)用程序兩端都會(huì)產(chǎn)生一個(gè)Socket實(shí)例,操作這個(gè)實(shí)例,完成所需的會(huì)話。對(duì)于一個(gè)網(wǎng)絡(luò)連接來說,套接字是平等的,并沒有差別,不因?yàn)樵诜?wù)器端或在客戶端而產(chǎn)生不同級(jí)別。不管是Socket還是ServerSocket它們的工作都是通過SocketImpl類及其子類完成的。

根據(jù)連接啟動(dòng)的方式以及本地套接字要連接的目標(biāo),套接字之間的連接過程可以分為三個(gè)步驟:服務(wù)器監(jiān)聽,客戶端請(qǐng)求,連接確認(rèn)。

服務(wù)器監(jiān)聽:是服務(wù)器端套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態(tài),實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)狀態(tài)。

客戶端請(qǐng)求:是指由客戶端的套接字提出連接請(qǐng)求,要連接的目標(biāo)是服務(wù)器端的套接字。為此,客戶端的套接字必須首先描述它要連接的服務(wù)器的套接字,指出服務(wù)器端套接字的地址和端口號(hào),然后就向服務(wù)器端套接字提出連接請(qǐng)求。

連接確認(rèn):是指當(dāng)服務(wù)器端套接字監(jiān)聽到或者說接收到客戶端套接字的連接請(qǐng)求,它就響應(yīng)客戶端套接字的請(qǐng)求,建立一個(gè)新的線程,把服務(wù)器端套接字的描述發(fā)給客戶端,一旦客戶端確認(rèn)了此描述,連接就建立好了。而服務(wù)器端套接字繼續(xù)處于監(jiān)聽狀態(tài),繼續(xù)接收其他客戶端套接字的連接請(qǐng)求。

如何開發(fā)一個(gè)Server-Client模型的程序

開發(fā)原理:

服務(wù)器,使用ServerSocket監(jiān)聽指定的端口,端口可以隨意指定(由于1024以下的端口通常屬于保留端口,在一些操作系統(tǒng)中不可以隨意使用,所以建議使用大于1024的端口),等待客戶連接請(qǐng)求,客戶連接后,會(huì)話產(chǎn)生;在完成會(huì)話后,關(guān)閉連接。

客戶端,使用Socket對(duì)網(wǎng)絡(luò)上某一個(gè)服務(wù)器的某一個(gè)端口發(fā)出連接請(qǐng)求,一旦連接成功,打開會(huì)話;會(huì)話完成后,關(guān)閉Socket??蛻舳瞬恍枰付ù蜷_的端口,通常臨時(shí)的、動(dòng)態(tài)的分配一個(gè)1024以上的端口。

Socket接口是TCP/IP網(wǎng)絡(luò)的API,Socket接口定義了許多函數(shù)或例程,程序員可以用它們來開發(fā)TCP/IP網(wǎng)絡(luò)上的應(yīng)用程序。要學(xué)Internet上的TCP/IP網(wǎng)絡(luò)編程,必須理解Socket接口。Socket接口設(shè)計(jì)者最先是將接口放在Unix操作系統(tǒng)里面的。如果了解Unix系統(tǒng)的輸入和輸出的話,就很容易了解Socket了。網(wǎng)絡(luò)的Socket數(shù)據(jù)傳輸是一種特殊的I/O,Socket也是一種文件描述符。Socket也具有一個(gè)類似于打開文件的函數(shù)調(diào)用Socket(),該函數(shù)返回一個(gè)整型的Socket描述符,隨后的連接建立、數(shù)據(jù)傳輸?shù)炔僮鞫际峭ㄟ^該Socket實(shí)現(xiàn)的。

相關(guān)文章

  • Minio設(shè)置文件鏈接永久有效的完整步驟

    Minio設(shè)置文件鏈接永久有效的完整步驟

    大家應(yīng)該都知道m(xù)inio分享文件的鏈接最多支持分享七天,而最近遇到了一個(gè)需求要求設(shè)置永久可下載,這篇文章主要給大家介紹了關(guān)于Minio設(shè)置文件鏈接永久有效的相關(guān)資料
    2022-07-07
  • AI經(jīng)典書單 人工智能入門該讀哪些書?

    AI經(jīng)典書單 人工智能入門該讀哪些書?

    學(xué)習(xí)人工智能該讀哪些書可以快速入門呢?我的答案是多讀經(jīng)典書。方向?qū)α思词孤c(diǎn),總會(huì)走向成功的終點(diǎn)。而該讀哪些書,小編推薦五份經(jīng)典書單
    2017-11-11
  • ElasticSearch核心概念

    ElasticSearch核心概念

    Elaticsearch簡(jiǎn)稱為es,es是一個(gè)開源的高擴(kuò)展的分布式全文檢索引擎,本文給大家介紹ElasticSearch基礎(chǔ)知識(shí)介紹,對(duì)ElasticSearch相關(guān)知識(shí)感興趣的朋友一起看看吧
    2022-07-07
  • ChatGPT平替-ChatGLM環(huán)境搭建與部署運(yùn)行效果

    ChatGPT平替-ChatGLM環(huán)境搭建與部署運(yùn)行效果

    這篇文章主要介紹了ChatGPT平替-ChatGLM環(huán)境搭建與部署運(yùn)行,本節(jié)將介紹環(huán)境搭建與基本部署效果,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • selenium使用webdriver.Chrome()報(bào)錯(cuò)的問題解決辦法

    selenium使用webdriver.Chrome()報(bào)錯(cuò)的問題解決辦法

    這篇文章主要給大家介紹了關(guān)于selenium使用webdriver.Chrome()報(bào)錯(cuò)問題的解決辦法,文中通過圖文將解決的辦法介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • git push & git pull 推送/拉取分支的具體使用

    git push & git pull 推送/拉取分支的具體使用

    這篇文章主要介紹了git push & git pull 推送/拉取分支的具體使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 5分鐘獲取deepseek api并搭建簡(jiǎn)易問答應(yīng)用

    5分鐘獲取deepseek api并搭建簡(jiǎn)易問答應(yīng)用

    本文主要介紹了5分鐘獲取deepseek api并搭建簡(jiǎn)易問答應(yīng)用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • 設(shè)計(jì)引導(dǎo)--一個(gè)鴨子游戲引發(fā)的設(shè)計(jì)理念(多態(tài),繼承,抽象,接口,策略者模式)

    設(shè)計(jì)引導(dǎo)--一個(gè)鴨子游戲引發(fā)的設(shè)計(jì)理念(多態(tài),繼承,抽象,接口,策略者模式)

    設(shè)計(jì)引導(dǎo)--一個(gè)鴨子游戲引發(fā)的設(shè)計(jì)多態(tài),繼承,抽象,接口,策略者模式;這篇博文是從實(shí)際生活中,提煉出來的設(shè)計(jì)理念,它現(xiàn)在是骨架,現(xiàn)在我加以代碼實(shí)例,完成程序的血肉,以求讓大家活生生的體會(huì)設(shè)計(jì)中的精髓
    2013-01-01
  • 在C#和Java語言中for和foreach的區(qū)別詳解

    在C#和Java語言中for和foreach的區(qū)別詳解

    這篇文章主要介紹了在C#和Java語言中for和foreach的區(qū)別詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • UE、UI、UCD、Interaction Design、UED、UX、HCI、Usability,IA

    UE、UI、UCD、Interaction Design、UED、UX、HCI、Usability,IA

    最近,總是纏綿在UE、UI、UCD、Interaction Design、UED、UX、HCI、Usability,IA等等名詞間,我一邊搜集,一邊整理,現(xiàn)在放在一次統(tǒng)一解釋,以便比較,以正視聽。很多地方未必準(zhǔn)確,歡迎提出修改意見。
    2009-04-04

最新評(píng)論

洪雅县| 多伦县| 绩溪县| 十堰市| 青龙| 石泉县| 石泉县| 宁德市| 嘉荫县| 曲靖市| 砚山县| 新源县| 乌鲁木齐县| 安化县| 丹凤县| 玉溪市| 台州市| 建德市| 肇州县| 广昌县| 江口县| 三穗县| 安多县| 民丰县| 阜城县| 平武县| 白朗县| 通许县| 民和| 通榆县| 台北县| 南开区| 巴塘县| 罗平县| 松桃| 佛坪县| 安阳县| 营山县| 永仁县| 合江县| 聂拉木县|