99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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++基礎(chǔ)語(yǔ)法梳理之網(wǎng)絡(luò)編程中Socket

C語(yǔ)言編程學(xué)習(xí)基地 ? 來(lái)源:C語(yǔ)言編程學(xué)習(xí)基地 ? 作者: C語(yǔ)言編程 ? 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)看下圖:

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

圖示過(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++喲~

編輯:jq

聲明:本文內(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)投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7256

    瀏覽量

    91880
  • Socket
    +關(guān)注

    關(guān)注

    1

    文章

    212

    瀏覽量

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

    關(guān)注

    88

    文章

    3689

    瀏覽量

    95256
  • TCP
    TCP
    +關(guān)注

    關(guān)注

    8

    文章

    1402

    瀏覽量

    81048
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4381

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    socket 和 UDP 協(xié)議的對(duì)比

    Socket 定義 Socket 是一個(gè)抽象層,它提供了一種方式,使得應(yīng)用程序能夠發(fā)送和接收數(shù)據(jù)。在網(wǎng)絡(luò)編程,
    的頭像 發(fā)表于 11-12 14:28 ?901次閱讀

    socket 在物聯(lián)網(wǎng)的應(yīng)用

    不同的計(jì)算機(jī)程序在網(wǎng)絡(luò)中進(jìn)行通信。它基于TCP/IP協(xié)議,提供了一種可靠的、面向連接的通信方式。在物聯(lián)網(wǎng)Socket使得設(shè)備能夠發(fā)送和接收數(shù)據(jù),實(shí)現(xiàn)遠(yuǎn)程控制和監(jiān)控。 2. Socket
    的頭像 發(fā)表于 11-12 14:19 ?1142次閱讀

    socket 多線程編程實(shí)現(xiàn)方法

    在現(xiàn)代網(wǎng)絡(luò)編程,多線程技術(shù)被廣泛應(yīng)用于提高服務(wù)器的并發(fā)處理能力。Socket編程網(wǎng)絡(luò)通信的基
    的頭像 發(fā)表于 11-12 14:16 ?1016次閱讀

    socket 發(fā)送和接收數(shù)據(jù)方法

    1. Socket 基本概念 在網(wǎng)絡(luò)編程,socket 是一個(gè)通信端點(diǎn)。它允許程序發(fā)送和接收數(shù)據(jù)。根據(jù)通信協(xié)議的不同,
    的頭像 發(fā)表于 11-12 14:07 ?1911次閱讀

    socket 網(wǎng)絡(luò)通信協(xié)議解析

    通信機(jī)制,它允許兩個(gè)程序(通常位于不同的計(jì)算機(jī)上)進(jìn)行雙向通信。在網(wǎng)絡(luò)編程,Socket被用來(lái)實(shí)現(xiàn)客戶端和服務(wù)器之間的數(shù)據(jù)交換。一個(gè)Socket
    的頭像 發(fā)表于 11-12 14:04 ?5223次閱讀

    socket 編程基礎(chǔ)入門(mén)

    Socket 編程基礎(chǔ)入門(mén) 在計(jì)算機(jī)網(wǎng)絡(luò)Socket 是一個(gè)抽象層,它將網(wǎng)絡(luò)通信的細(xì)節(jié)隱藏起
    的頭像 發(fā)表于 11-12 14:03 ?1027次閱讀

    飛凌嵌入式ElfBoard ELF 1板卡-網(wǎng)絡(luò)編程示例socket編程

    感覺(jué)貼近一些socket編程流程socket編程就是套路,很多代碼都是可重用的。而且步驟很固定,下面給出一個(gè)流程(事實(shí)上網(wǎng)絡(luò)
    發(fā)表于 11-11 14:14

    socket編程的錯(cuò)誤處理技巧

    Socket編程網(wǎng)絡(luò)編程的基礎(chǔ),它允許程序之間通過(guò)TCP/IP協(xié)議進(jìn)行通信。然而,網(wǎng)絡(luò)通信是不穩(wěn)定的,可能會(huì)遇到各種問(wèn)題,如
    的頭像 發(fā)表于 11-01 17:47 ?1546次閱讀

    C語(yǔ)言中的socket編程基礎(chǔ)

    Socket編程簡(jiǎn)介 Socket是一種通信機(jī)制,允許程序之間進(jìn)行通信。在C語(yǔ)言中,socket編程
    的頭像 發(fā)表于 11-01 16:51 ?1234次閱讀

    socket連接超時(shí)如何處理

    網(wǎng)絡(luò)編程,socket連接超時(shí)是一個(gè)常見(jiàn)的問(wèn)題,它可能由多種原因引起,比如網(wǎng)絡(luò)延遲、服務(wù)器負(fù)載過(guò)高或者客戶端請(qǐng)求超時(shí)設(shè)置過(guò)短等。處理
    的頭像 發(fā)表于 11-01 16:48 ?2355次閱讀

    socket編程的阻塞與非阻塞

    網(wǎng)絡(luò)編程, socket 是一個(gè)非常重要的概念,它提供了一個(gè)抽象層,使得開(kāi)發(fā)者可以不必關(guān)心底層的網(wǎng)絡(luò)通信細(xì)節(jié)。
    的頭像 發(fā)表于 11-01 16:13 ?753次閱讀

    什么是socket編程 socket與tcp/ip協(xié)議的關(guān)系

    什么是Socket編程 Socket編程是一種網(wǎng)絡(luò)編程技術(shù),它允許程序之間進(jìn)行通信。在計(jì)算機(jī)科學(xué)
    的頭像 發(fā)表于 11-01 16:01 ?1202次閱讀

    socket的基本概念和原理

    Socket是一種通信協(xié)議,用于在網(wǎng)絡(luò)實(shí)現(xiàn)進(jìn)程間的通信。它是一種抽象的編程接口,允許應(yīng)用程序通過(guò)網(wǎng)絡(luò)發(fā)送和接收數(shù)據(jù)。 1. 什么是
    的頭像 發(fā)表于 08-16 10:51 ?4678次閱讀

    簡(jiǎn)述socket編程的常用函數(shù)

    Socket編程是一種基于TCP/IP協(xié)議的網(wǎng)絡(luò)編程技術(shù),它允許應(yīng)用程序通過(guò)網(wǎng)絡(luò)進(jìn)行通信。在Socket
    的頭像 發(fā)表于 08-16 10:49 ?886次閱讀

    如何理解socket編程接口

    不同計(jì)算機(jī)之間進(jìn)行通信的方法。在網(wǎng)絡(luò)編程,Socket被廣泛用于實(shí)現(xiàn)客戶端和服務(wù)器之間的通信。 1.2 Socket的分類(lèi) 根據(jù)通信方式的
    的頭像 發(fā)表于 08-16 10:48 ?928次閱讀