那曲檬骨新材料有限公司

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

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

3天內不再提示

C++中網絡編程Socket介紹

C語言編程學習基地 ? 來源:C語言編程學習基地 ? 作者:C語言編程學習基地 ? 2021-10-26 10:10 ? 次閱讀

Socket

Linux Socket 編程(不限 Linux)

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

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

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

read()

read 函數是負責從 fd 中讀取內容。

當讀成功時,read 返回實際所讀的字節數。

如果返回的值是 0 表示已經讀到文件的結束了,小于 0 表示出現了錯誤。

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

write()

write 函數將 buf 中的 nbytes 字節內容寫入文件描述符 fd。

成功時返回寫的字節數。失敗時返回 -1,并設置 errno 變量。

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

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

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

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

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

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

客戶端向服務器發送一個 SYN J

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

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

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

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

從圖中可以看出:

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

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

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

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

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

上面介紹了 socket 中 TCP 的三次握手建立過程,及其涉及的 socket 函數。現在我們介紹 socket 中的四次握手釋放連接的過程,請看下圖:

圖示過程如下:

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

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

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

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

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

————

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

責任編輯:haq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11345

    瀏覽量

    210386
  • 編程
    +關注

    關注

    88

    文章

    3637

    瀏覽量

    93981
  • C++
    C++
    +關注

    關注

    22

    文章

    2114

    瀏覽量

    73854

原文標題:C++基礎語法梳理:網絡編程丨Socket

文章出處:【微信號:cyuyanxuexi,微信公眾號:C語言編程學習基地】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Spire.XLS for C++組件說明

    開發人員可以快速地在 C++ 平臺上完成對 Excel 的各種編程操作,如根據模板創建新的 Excel 文檔,編輯現有 Excel 文檔,以及對 Excel 文檔進行轉換。 Spire.XLS
    的頭像 發表于 01-14 09:40 ?145次閱讀
    Spire.XLS for <b class='flag-5'>C++</b>組件說明

    socket 和 UDP 協議的對比

    Socket 定義 Socket 是一個抽象層,它提供了一種方式,使得應用程序能夠發送和接收數據。在網絡編程中,Socket 允許程序創
    的頭像 發表于 11-12 14:28 ?397次閱讀

    socket 多線程編程實現方法

    在現代網絡編程中,多線程技術被廣泛應用于提高服務器的并發處理能力。Socket編程網絡通信的基礎,而將多線程技術應用于
    的頭像 發表于 11-12 14:16 ?464次閱讀

    socket 發送和接收數據方法

    1. Socket 基本概念 在網絡編程中,socket 是一個通信端點。它允許程序發送和接收數據。根據通信協議的不同,socket 可以分
    的頭像 發表于 11-12 14:07 ?678次閱讀

    socket 網絡通信協議解析

    通信機制,它允許兩個程序(通常位于不同的計算機上)進行雙向通信。在網絡編程中,Socket被用來實現客戶端和服務器之間的數據交換。一個Socket由一個IP地址和一個端口號唯一標識,這
    的頭像 發表于 11-12 14:04 ?896次閱讀

    socket 編程基礎入門

    Socket 編程基礎入門 在計算機網絡中,Socket 是一個抽象層,它將網絡通信的細節隱藏起來,為開發者提供了一個簡單的接口來發送和接收
    的頭像 發表于 11-12 14:03 ?423次閱讀

    C語言中的socket編程基礎

    Socket編程簡介 Socket是一種通信機制,允許程序之間進行通信。在C語言中,socket編程
    的頭像 發表于 11-01 16:51 ?465次閱讀

    socket連接超時如何處理

    網絡編程中,socket連接超時是一個常見的問題,它可能由多種原因引起,比如網絡延遲、服務器負載過高或者客戶端請求超時設置過短等。處理socket
    的頭像 發表于 11-01 16:48 ?989次閱讀

    socket編程中的阻塞與非阻塞

    網絡編程中, socket 是一個非常重要的概念,它提供了一個抽象層,使得開發者可以不必關心底層的網絡通信細節。 socket
    的頭像 發表于 11-01 16:13 ?282次閱讀

    什么是socket編程 socket與tcp/ip協議的關系

    什么是Socket編程 Socket編程是一種網絡編程技術,它允許程序之間進行通信。在計算機科學
    的頭像 發表于 11-01 16:01 ?476次閱讀

    socket和http區別是什么

    Socket和HTTP是兩種不同的網絡通信協議,它們在網絡編程中扮演著重要的角色。 定義 Socket(套接字)是一種通信端點,它提供了一個
    的頭像 發表于 08-16 11:04 ?1016次閱讀

    socket的基本概念和原理

    Socket是一種通信協議,用于在網絡中實現進程間的通信。它是一種抽象的編程接口,允許應用程序通過網絡發送和接收數據。 1. 什么是Socket
    的頭像 發表于 08-16 10:51 ?1409次閱讀

    簡述socket編程中的常用函數

    Socket編程是一種基于TCP/IP協議的網絡編程技術,它允許應用程序通過網絡進行通信。在Socket
    的頭像 發表于 08-16 10:49 ?458次閱讀

    如何理解socket編程接口

    Socket編程接口是一種網絡編程的基本概念,它提供了一種在不同計算機之間進行通信的方法。 Socket
    的頭像 發表于 08-16 10:48 ?511次閱讀

    鴻蒙開發實戰:【網絡管理-Socket連接】

    Socket網絡通信方面的應用,展示了Socket在兩端設備的連接驗證、聊天通信方面的應用。
    的頭像 發表于 03-19 22:04 ?951次閱讀
    鴻蒙開發實戰:【<b class='flag-5'>網絡</b>管理-<b class='flag-5'>Socket</b>連接】
    威尼斯人娱乐城微博| 大发888 34| 新濠天地娱乐城| 菲律宾百家乐官网娱乐平台| 百家乐大转轮| 足球投注现金网| 百家乐官网有没有单机版的| 百家乐翻天在线观看| 百家乐官网庄闲的分布| 百家乐体育宝贝| 大发888m磨卡游戏| 百家乐官网闲和庄| 百家乐赢家电子书| 同江市| 百家乐下载游戏| 中国足球竞猜| 百家乐赚钱项目| 百乐坊娱乐城官网| 悦榕庄百家乐官网的玩法技巧和规则 | 百家乐庄闲点数| 362娱乐城开户| 新锦江百家乐官网娱乐场开户注册| 太阳城真人娱乐城| 百家乐官网最新产品| 威尼斯人娱乐城地址lm0| 钱隆百家乐官网分析| 百家乐b28博你发v| 新澳博百家乐官网娱乐城| 老k百家乐的玩法技巧和规则| 百家乐官网的规则博彩正网| 海港城百家乐的玩法技巧和规则| 百家乐官网投注心得和技巧| 网上百家乐试玩网址| 百家乐官网无损打法| 大发888娱乐城dmwd| 百家乐官网合| bet365贴吧| 顶尖百家乐对单| 积石山| 乐天堂百家乐娱乐场| 百家乐官网平台有什么优势|