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

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

淺析C++基礎語法梳理之網(wǎng)絡編程中Socket

C語言編程學習基地 ? 來源:C語言編程學習基地 ? 作者: C語言編程 ? 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ù)是負責從 fd 中讀取內容。

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

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

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

write()

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

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

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

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

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

如果錯誤為 EINTR 表示在寫的時候出現(xiàn)了中斷錯誤;如果為 EPIPE 表示網(wǎng)絡連接出現(xiàn)了問題(對方已經(jīng)關閉了連接)。

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

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

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

服務器向客戶端響應一個 SYN K,并對 SYN J 進行確認 ACK J+1

客戶端再想服務器發(fā)一個確認 ACK K+1

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

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

從圖中可以看出:

(1)當客戶端調用 connect 時,觸發(fā)了連接請求,向服務器發(fā)送了 SYN J 包,這時 connect 進入阻塞狀態(tài);

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

(3)客戶端收到服務器的 SYN K ,ACK J+1 之后,這時 connect 返回,并對 SYN K 進行確認;

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

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

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

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

圖示過程如下:

某個應用進程首先調用 close 主動關閉連接,這時 TCP 發(fā)送一個 FIN M;

另一端接收到 FIN M 之后,執(zhí)行被動關閉,對這個 FIN 進行確認。它的接收也作為文件結束符傳遞給應用進程,因為 FIN 的接收意味著應用進程在相應的連接上再也接收不到額外數(shù)據(jù);

一段時間之后,接收到文件結束符的應用進程調用 close 關閉它的 socket。這導致它的 TCP 也發(fā)送一個 FIN N;

接收到這個 FIN 的源發(fā)送端 TCP 對它進行確認。

這樣每個方向上都有一個 FIN 和 ACK。

————

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

編輯:jq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)

    關注

    8

    文章

    7349

    瀏覽量

    95058
  • Socket
    +關注

    關注

    1

    文章

    214

    瀏覽量

    37038
  • 編程
    +關注

    關注

    90

    文章

    3724

    瀏覽量

    97458
  • TCP
    TCP
    +關注

    關注

    8

    文章

    1434

    瀏覽量

    83784
  • 函數(shù)
    +關注

    關注

    3

    文章

    4422

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    使用VectorCAST/C++的AI輔助測試功能

    從2026版本開始,VectorCAST/C++推出首批AI輔助測試功能,旨在幫助開發(fā)團隊解決單元測試過程的兩個核心難點:
    的頭像 發(fā)表于 04-27 14:37 ?317次閱讀

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

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

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

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

    輕松掌握——LuatOS socket基礎知識和應用開發(fā)

    LuatOS環(huán)境創(chuàng)建客戶端與服務器、發(fā)送與接收數(shù)據(jù)等關鍵技能,為后續(xù)復雜應用打下堅實基礎。 一、主要內容 LuatOS socket是LuatOS開發(fā)中最常用到的網(wǎng)絡應用之一; LuatOS
    的頭像 發(fā)表于 01-28 20:07 ?401次閱讀
    輕松掌握——LuatOS  <b class='flag-5'>socket</b>基礎知識和應用開發(fā)

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

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

    汽車網(wǎng)絡安全開發(fā)語言選型指南:C/C++/Rust/Java等主流語言對比+Perforce QAC/Klocwork工具支持

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

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

    C語言和C++到底是什么關系? 首先C++C語言本來就是兩種不同的編程語言,但C++確實是對
    發(fā)表于 12-24 07:23

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

    1、語法兼容性: C++完全兼容C語言的語法,這意味著任何有效的C語言程序都可以直接在C++
    發(fā)表于 12-11 06:51

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

    C++的標準庫那樣集成度高和功能齊全。 6、編譯器與語言特性: C++編譯器通常比C語言編譯器更加復雜,因為它需要處理更多的語言特性,比如模板元編程、命名空間、引用等。
    發(fā)表于 12-11 06:23

    socket是什么

    Socket(套接字)是計算機網(wǎng)絡的一個概念,它指示了一個可以進行網(wǎng)絡通信的軟件端點。通過使用Socket,計算機程序可以通過
    發(fā)表于 12-03 08:27

    C++程序異常的處理機制

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

    強實時運動控制內核MotionRT750(六):us級高速交互C++,為智能裝備提速

    Windows下運動控制實時內核MotionRT750的高速交互C++
    的頭像 發(fā)表于 09-04 14:50 ?948次閱讀
    強實時運動控制內核MotionRT750(六):us級高速交互<b class='flag-5'>之</b><b class='flag-5'>C++</b>,為智能裝備提速

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

    和PiGPIO等庫,C++可用于編程控制樹莓派的GPIO引腳。它提供了更好的性能和控制能力,非常適合對速度和精度要求較高的硬件項目。在樹莓派社區(qū),關于“Python
    的頭像 發(fā)表于 08-06 15:33 ?4527次閱讀
    技能+1!如何在樹莓派上使用<b class='flag-5'>C++</b>控制GPIO?

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

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

    請問在k230的Socket、MQTT等常用網(wǎng)絡編程應用如何實現(xiàn)圖像傳輸呢?

    Socket、MQTT,或者網(wǎng)絡通信應用如何實現(xiàn)圖像傳輸呢? 能給幾個提示或者參考例程嗎。謝謝 micropython 請參考如下例子 https
    發(fā)表于 06-17 06:29
    乌拉特中旗| 昂仁县| 庄河市| 遵义市| 皋兰县| 恩平市| 临高县| 元朗区| 白河县| 吐鲁番市| 英超| 盖州市| 黄梅县| 滁州市| 沈阳市| 泰兴市| 民县| 中西区| 丽水市| 革吉县| 山丹县| 临沂市| 呼和浩特市| 兴和县| 偏关县| 晋中市| 濮阳县| 青海省| 桂东县| 皮山县| 贵定县| 佛山市| 屏山县| 民丰县| 尖扎县| 凤翔县| 平阴县| 南郑县| 蚌埠市| 石林| 无为县|