日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C++中網(wǎng)絡(luò)編程Socket介紹

C語(yǔ)言編程學(xué)習(xí)基地 ? 來(lái)源:C語(yǔ)言編程學(xué)習(xí)基地 ? 作者:C語(yǔ)言編程學(xué)習(xí)基地 ? 2021-10-26 10:10 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Socket

Linux Socket 編程(不限 Linux)

a9b4f35c-357e-11ec-82a8-dac502259ad0.jpg

Socket 中的 read()、write() 函數(shù)

ssize_tread(intfd,void*buf,size_tcount);ssize_twrite(intfd,constvoid*buf,size_tcount);

read()

read 函數(shù)是負(fù)責(zé)從 fd 中讀取內(nèi)容。

當(dāng)讀成功時(shí),read 返回實(shí)際所讀的字節(jié)數(shù)。

如果返回的值是 0 表示已經(jīng)讀到文件的結(jié)束了,小于 0 表示出現(xiàn)了錯(cuò)誤。

如果錯(cuò)誤為 EINTR 說(shuō)明讀是由中斷引起的;如果是 ECONNREST 表示網(wǎng)絡(luò)連接出了問(wèn)題。

write()

write 函數(shù)將 buf 中的 nbytes 字節(jié)內(nèi)容寫(xiě)入文件描述符 fd。

成功時(shí)返回寫(xiě)的字節(jié)數(shù)。失敗時(shí)返回 -1,并設(shè)置 errno 變量。

在網(wǎng)絡(luò)程序中,當(dāng)我們向套接字文件描述符寫(xiě)時(shí)有倆種可能。

(1)write 的返回值大于 0,表示寫(xiě)了部分或者是全部的數(shù)據(jù)。

(2)返回的值小于 0,此時(shí)出現(xiàn)了錯(cuò)誤。

如果錯(cuò)誤為 EINTR 表示在寫(xiě)的時(shí)候出現(xiàn)了中斷錯(cuò)誤;如果為 EPIPE 表示網(wǎng)絡(luò)連接出現(xiàn)了問(wèn)題(對(duì)方已經(jīng)關(guān)閉了連接)。

Socket 中 TCP 的三次握手建立連接

我們知道 TCP 建立連接要進(jìn)行 “三次握手”,即交換三個(gè)分組。大致流程如下:

客戶端向服務(wù)器發(fā)送一個(gè) SYN J

服務(wù)器向客戶端響應(yīng)一個(gè) SYN K,并對(duì) SYN J 進(jìn)行確認(rèn) ACK J+1

客戶端再想服務(wù)器發(fā)一個(gè)確認(rèn) ACK K+1

只有就完了三次握手,但是這個(gè)三次握手發(fā)生在 Socket 的那幾個(gè)函數(shù)中呢?請(qǐng)看下圖:

a9c8e056-357e-11ec-82a8-dac502259ad0.png

從圖中可以看出:

(1)當(dāng)客戶端調(diào)用 connect 時(shí),觸發(fā)了連接請(qǐng)求,向服務(wù)器發(fā)送了 SYN J 包,這時(shí) connect 進(jìn)入阻塞狀態(tài);

(2)服務(wù)器監(jiān)聽(tīng)到連接請(qǐng)求,即收到 SYN J 包,調(diào)用 accept 函數(shù)接收請(qǐng)求向客戶端發(fā)送 SYN K ,ACK J+1,這時(shí) accept 進(jìn)入阻塞狀態(tài);

(3)客戶端收到服務(wù)器的 SYN K ,ACK J+1 之后,這時(shí) connect 返回,并對(duì) SYN K 進(jìn)行確認(rèn);

(4)服務(wù)器收到 ACK K+1 時(shí),accept 返回,至此三次握手完畢,連接建立。

Socket 中 TCP 的四次握手釋放連接

上面介紹了 socket 中 TCP 的三次握手建立過(guò)程,及其涉及的 socket 函數(shù)?,F(xiàn)在我們介紹 socket 中的四次握手釋放連接的過(guò)程,請(qǐng)看下圖:

圖示過(guò)程如下:

某個(gè)應(yīng)用進(jìn)程首先調(diào)用 close 主動(dòng)關(guān)閉連接,這時(shí) TCP 發(fā)送一個(gè) FIN M;

另一端接收到 FIN M 之后,執(zhí)行被動(dòng)關(guān)閉,對(duì)這個(gè) FIN 進(jìn)行確認(rèn)。它的接收也作為文件結(jié)束符傳遞給應(yīng)用進(jìn)程,因?yàn)?FIN 的接收意味著應(yīng)用進(jìn)程在相應(yīng)的連接上再也接收不到額外數(shù)據(jù);

一段時(shí)間之后,接收到文件結(jié)束符的應(yīng)用進(jìn)程調(diào)用 close 關(guān)閉它的 socket。這導(dǎo)致它的 TCP 也發(fā)送一個(gè) FIN N;

接收到這個(gè) FIN 的源發(fā)送端 TCP 對(duì)它進(jìn)行確認(rèn)。

這樣每個(gè)方向上都有一個(gè) FIN 和 ACK。

————

今天的分享就到這里了,大家要好好學(xué)C++喲~

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    88

    文章

    11822

    瀏覽量

    219605
  • 編程
    +關(guān)注

    關(guān)注

    90

    文章

    3724

    瀏覽量

    97458
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2131

    瀏覽量

    77420

原文標(biāo)題:C++基礎(chǔ)語(yǔ)法梳理:網(wǎng)絡(luò)編程丨Socket

文章出處:【微信號(hào):cyuyanxuexi,微信公眾號(hào):C語(yǔ)言編程學(xué)習(xí)基地】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Libevent C++高并發(fā)網(wǎng)絡(luò)編程 | 完結(jié)

    ?在2026年的技術(shù)版圖中,盡管高級(jí)語(yǔ)言和AI輔助編程已經(jīng)接管了大部分業(yè)務(wù)邏輯的構(gòu)建,但在高并發(fā)、低延遲的核心網(wǎng)絡(luò)基礎(chǔ)設(shè)施領(lǐng)域,C++與Libevent的結(jié)合依然穩(wěn)如磐石。它們構(gòu)成了數(shù)字世界
    的頭像 發(fā)表于 04-20 15:50 ?525次閱讀

    C++與lua聯(lián)合編程

    手工業(yè)”。然而,這兩種內(nèi)存管理機(jī)制截然不同的語(yǔ)言,如何在一個(gè)進(jìn)程內(nèi)進(jìn)行高效的數(shù)據(jù)交換,一直是企業(yè)級(jí)開(kāi)發(fā)中的痛點(diǎn)。(看讠果aixuetang。xyz) 從經(jīng)濟(jì)學(xué)的視角來(lái)審視,夏曹俊老師《C++ 腳本編程
    發(fā)表于 04-19 16:27

    輕松掌握——LuatOS socket基礎(chǔ)知識(shí)和應(yīng)用開(kāi)發(fā)

    socket課程主要包含以下幾個(gè)部分: 1、TCP/IP總體介紹; 2、LuatOS上的?4G/WiFi/以太網(wǎng)?三種網(wǎng)絡(luò)環(huán)
    的頭像 發(fā)表于 01-28 20:07 ?401次閱讀
    輕松掌握——LuatOS  <b class='flag-5'>socket</b>基礎(chǔ)知識(shí)和應(yīng)用開(kāi)發(fā)

    keil實(shí)現(xiàn)cc++混合編程

    起因項(xiàng)目中使用到一個(gè)開(kāi)源的模擬IIC的庫(kù),封裝的比較好,但是是使用c++寫(xiě)的。于是將其移植到自己的項(xiàng)目中,主要有以下三步操作: 在工程選項(xiàng)中 C/C++中去掉勾選 C99 Mode
    發(fā)表于 01-26 08:58

    汽車(chē)網(wǎng)絡(luò)安全開(kāi)發(fā)語(yǔ)言選型指南:C/C++/Rust/Java等主流語(yǔ)言對(duì)比+Perforce QAC/Klocwork工具支持

    汽車(chē)網(wǎng)絡(luò)安全如何選編程語(yǔ)言?C、C++、Rust、Java……誰(shuí)更適合AUTOSAR、ISO/SAE 21434?一文了解8種主流語(yǔ)言的優(yōu)劣與適用場(chǎng)景,以及Perforce QAC/K
    的頭像 發(fā)表于 12-26 11:13 ?676次閱讀
    汽車(chē)<b class='flag-5'>網(wǎng)絡(luò)</b>安全開(kāi)發(fā)語(yǔ)言選型指南:<b class='flag-5'>C</b>/<b class='flag-5'>C++</b>/Rust/Java等主流語(yǔ)言對(duì)比+Perforce QAC/Klocwork工具支持

    C語(yǔ)言與C++的區(qū)別及聯(lián)系

    C語(yǔ)言和C++到底是什么關(guān)系? 首先C++C語(yǔ)言本來(lái)就是兩種不同的編程語(yǔ)言,但C++確實(shí)是對(duì)
    發(fā)表于 12-24 07:23

    CC++之間的聯(lián)系

    控制能力,這一點(diǎn)與C語(yǔ)言相似,使得它們?cè)谙到y(tǒng)編程、嵌入式系統(tǒng)等領(lǐng)域都得到廣泛應(yīng)用。 3、發(fā)展歷程: C++正是在C語(yǔ)言的基礎(chǔ)上逐步發(fā)展起來(lái)的,C
    發(fā)表于 12-11 06:51

    C語(yǔ)言和C++之間的區(qū)別是什么

    區(qū)別 1、面向?qū)ο?b class='flag-5'>編程 (OOP): C語(yǔ)言是一種面向過(guò)程的語(yǔ)言,它強(qiáng)調(diào)的是通過(guò)函數(shù)將任務(wù)分解為一系列步驟進(jìn)行執(zhí)行。 C++C語(yǔ)言的基礎(chǔ)上擴(kuò)展了面向?qū)ο蟮奶匦裕С诸?lèi)(class)
    發(fā)表于 12-11 06:23

    socket是什么

    特定的IP地址和端口上等待客戶端連接,客戶端則通過(guò)Socket連接到服務(wù)器程序并進(jìn)行通信。通過(guò)Socket技術(shù),可以實(shí)現(xiàn)不同操作系統(tǒng)和編程語(yǔ)言之間的通信,使得網(wǎng)絡(luò)應(yīng)用程序的開(kāi)發(fā)更加靈活
    發(fā)表于 12-03 08:27

    C++程序異常的處理機(jī)制

    1、什么是異常處理? 有經(jīng)驗(yàn)的朋友應(yīng)該知道,在正常的CC++編程過(guò)程中難免會(huì)碰到程序不按照原本設(shè)計(jì)運(yùn)行的情況。 最常見(jiàn)的有除法分母為零,數(shù)組越界,內(nèi)存分配失效、打開(kāi)相應(yīng)文件失敗等等。 一個(gè)程序
    發(fā)表于 12-02 07:12

    技能+1!如何在樹(shù)莓派上使用C++控制GPIO?

    在使用樹(shù)莓派時(shí),你會(huì)發(fā)現(xiàn)Python和Scratch是許多任務(wù)(包括GPIO編程)中最常用的編程語(yǔ)言。但你知道嗎,你也可以使用C++進(jìn)行GPIO編程,而且這樣做還有不少好處。借助Wir
    的頭像 發(fā)表于 08-06 15:33 ?4527次閱讀
    技能+1!如何在樹(shù)莓派上使用<b class='flag-5'>C++</b>控制GPIO?

    C++ 與 Python:樹(shù)莓派上哪種語(yǔ)言更優(yōu)?

    Python是樹(shù)莓派上的首選編程語(yǔ)言,我們的大部分教程都使用它。然而,C++在物聯(lián)網(wǎng)項(xiàng)目中同樣廣受歡迎且功能強(qiáng)大。那么,在樹(shù)莓派項(xiàng)目中選擇哪種語(yǔ)言更合適呢?Python因其簡(jiǎn)潔性、豐富的庫(kù)和資源而被
    的頭像 發(fā)表于 07-24 15:32 ?1135次閱讀
    <b class='flag-5'>C++</b> 與 Python:樹(shù)莓派上哪種語(yǔ)言更優(yōu)?

    Linux系統(tǒng)中網(wǎng)絡(luò)配置詳解

    網(wǎng)絡(luò)配置是Linux系統(tǒng)運(yùn)維中的核心技能之一。正確理解和配置子網(wǎng)掩碼、網(wǎng)關(guān)等網(wǎng)絡(luò)參數(shù),直接影響系統(tǒng)的網(wǎng)絡(luò)連通性和性能。本文將深入探討Linux系統(tǒng)中網(wǎng)絡(luò)配置的方方面面,為運(yùn)維工程師提供
    的頭像 發(fā)表于 07-17 11:01 ?1412次閱讀

    請(qǐng)問(wèn)在k230的Socket、MQTT等常用網(wǎng)絡(luò)編程應(yīng)用中如何實(shí)現(xiàn)圖像傳輸呢?

    Socket、MQTT,或者網(wǎng)絡(luò)通信應(yīng)用中如何實(shí)現(xiàn)圖像傳輸呢? 能給幾個(gè)提示或者參考例程嗎。謝謝 micropython 請(qǐng)參考如下例子 https
    發(fā)表于 06-17 06:29

    主流的 MCU 開(kāi)發(fā)語(yǔ)言為什么是 C 而不是 C++?

    在單片機(jī)的地界兒里,C語(yǔ)言穩(wěn)坐中軍帳,C++想分杯羹?難嘍。咱電子工程師天天跟那針尖大的內(nèi)存空間較勁,C++那些花里胡哨的玩意兒,在這兒真玩不轉(zhuǎn)。先說(shuō)內(nèi)存這道坎兒。您當(dāng)stm32f4的256kRAM
    的頭像 發(fā)表于 05-21 10:33 ?1230次閱讀
    主流的 MCU 開(kāi)發(fā)語(yǔ)言為什么是 <b class='flag-5'>C</b> 而不是 <b class='flag-5'>C++</b>?
    射阳县| 六盘水市| 休宁县| 辽宁省| 吴江市| 奉化市| 化州市| 垦利县| 霍州市| 自贡市| 射阳县| 秦皇岛市| 苏州市| 盐池县| 南京市| 改则县| 阿拉善左旗| 蕲春县| 蒙自县| 黄龙县| 阜新市| 宕昌县| 大化| 鄂尔多斯市| 江门市| 正镶白旗| 乐清市| 南靖县| 邵武市| 鄂伦春自治旗| 阆中市| 巨野县| 阿鲁科尔沁旗| 五常市| 社会| 高台县| 鄂伦春自治旗| 安多县| 东源县| 昌黎县| 蒲江县|