中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

武漢教育網(wǎng)站建設(shè)優(yōu)化發(fā)帖平臺(tái)

武漢教育網(wǎng)站建設(shè)優(yōu)化,發(fā)帖平臺(tái),上海中學(xué)官網(wǎng)電腦版,二次開(kāi)發(fā)焦點(diǎn)吧目錄 一、網(wǎng)絡(luò)協(xié)議 1.網(wǎng)絡(luò)協(xié)議概念 2.協(xié)議分層 3.OSI七層模型和TCP/IP五層(或四層)模型 4.為什么要有網(wǎng)絡(luò)協(xié)議? 5.網(wǎng)絡(luò)通信協(xié)議的原理 二、網(wǎng)絡(luò)傳輸?shù)幕玖鞒? 1.局域網(wǎng)的網(wǎng)絡(luò)傳輸流程 1.MAC地址 2.局域網(wǎng)通信原理(以太網(wǎng)…

目錄

一、網(wǎng)絡(luò)協(xié)議

1.網(wǎng)絡(luò)協(xié)議概念

2.協(xié)議分層

3.OSI七層模型和TCP/IP五層(或四層)模型

4.為什么要有網(wǎng)絡(luò)協(xié)議?

5.網(wǎng)絡(luò)通信協(xié)議的原理

二、網(wǎng)絡(luò)傳輸?shù)幕玖鞒?/p>

1.局域網(wǎng)的網(wǎng)絡(luò)傳輸流程

1.MAC地址

2.局域網(wǎng)通信原理(以太網(wǎng)為例)

3.協(xié)議的封裝和解包、分用

2. 跨網(wǎng)絡(luò)傳輸流程圖

1.IP地址

2.跨網(wǎng)絡(luò)通信原理

?編輯3.IP地址對(duì)比MAC地址

三、Socket編程預(yù)備知識(shí)

1.端口號(hào)Port

2.端口號(hào)和進(jìn)程ID的區(qū)別

3.理解Socket

4.認(rèn)識(shí)傳輸層中的典型協(xié)議

5.網(wǎng)絡(luò)字節(jié)序

6.Socket編程接口

(1)創(chuàng)建 socket 文件描述符(TCP/UDP, 客戶端 + 服務(wù)器)

(2)綁定端口號(hào) (TCP/UDP, 服務(wù)器)

(3)開(kāi)始監(jiān)聽(tīng)socket (TCP, 服務(wù)器)

(4)接收請(qǐng)求 (TCP, 服務(wù)器)

(5)建立連接 (TCP, 客戶端)

(6)接收數(shù)據(jù)(UDP,服務(wù)端)

(7)發(fā)送數(shù)據(jù)sendto

7.關(guān)于sockaddr結(jié)構(gòu)體

(1)struct sockaddr_in

(2)struct sockaddr_un


一、網(wǎng)絡(luò)協(xié)議

1.網(wǎng)絡(luò)協(xié)議概念

計(jì)算機(jī)之間的傳輸媒介是光信號(hào)和電信號(hào),通過(guò)“頻率”和“強(qiáng)弱”表示0或1。如果想要傳遞各種各樣的信息,就要約定好雙方通信信息的數(shù)據(jù)格式。

為了讓不同廠商生產(chǎn)的計(jì)算機(jī)可以相互通暢地通信,就需要約定一個(gè)共同的通信標(biāo)準(zhǔn),所有人都要遵守,這個(gè)共同的通信標(biāo)準(zhǔn)就是網(wǎng)絡(luò)協(xié)議。

2.協(xié)議分層

協(xié)議本質(zhì)是一個(gè)軟件,協(xié)議分層是為了實(shí)現(xiàn)解耦合,讓軟件維護(hù)成本更低。

例如下圖:將協(xié)議分層為兩層:語(yǔ)言層和通信設(shè)備層。以打電話為例,邏輯上是兩個(gè)人在直接通信,但實(shí)際上是需要通過(guò)電話來(lái)傳輸信息,電話機(jī)之間遵循的時(shí)電話間之間的協(xié)議,人與人之間遵循的是漢語(yǔ)協(xié)議。

如果將電話機(jī)通信改為無(wú)線電通信,那么通信設(shè)備層之間遵循的就是無(wú)線電協(xié)議;如果將漢語(yǔ)改為英語(yǔ),那么語(yǔ)言層之間遵循的就是英語(yǔ)協(xié)議。

實(shí)際上的網(wǎng)絡(luò)通信協(xié)議設(shè)計(jì)地更復(fù)雜,需要分為更多層。

3.OSI七層模型和TCP/IP五層(或四層)模型

?OSI七層模型是開(kāi)放式系統(tǒng)互聯(lián)參考模型, 是一個(gè)邏輯上的定義和規(guī)范。將網(wǎng)絡(luò)通信協(xié)議從邏輯上分為了7層,但是實(shí)際實(shí)現(xiàn)時(shí)OSI七層模型比較復(fù)雜冗余,所以真正采用的是TCP/IP五層(或四層)模型。TCP/IP五層(或四層)模型將OSI七層模型中的應(yīng)用層、表示層和會(huì)話層合為一個(gè)層。又由于物理層考慮的比較少,所以TCP/IP模型也叫做四層模型。

TCP/IP五層(或四層)模型是一組協(xié)議的代名詞,它其中還包括許多其他協(xié)議,共同組成了TCP/IP協(xié)議簇。

  • 物理層: 負(fù)責(zé)光/電信號(hào)的傳遞方式. 比如現(xiàn)在以太網(wǎng)通用的網(wǎng)線(雙絞線)、早期以太網(wǎng)采用的的同軸電纜 (現(xiàn)在主要用于有線電視)、光纖, 現(xiàn)在的wifi無(wú)線網(wǎng)使用電磁波等都屬于物理層的概念。物理層的能力決 定了最大傳輸速率、傳輸距離、抗干擾性等. 集線器(Hub)工作在物理層.
  • 數(shù)據(jù)鏈路層: 負(fù)責(zé)設(shè)備之間的數(shù)據(jù)幀的傳送和識(shí)別. 例如網(wǎng)卡設(shè)備的驅(qū)動(dòng)、幀同步(就是說(shuō)從網(wǎng)線上檢測(cè) 到什么信號(hào)算作新幀的開(kāi)始)、沖突檢測(cè)(如果檢測(cè)到?jīng)_突就自動(dòng)重發(fā))、數(shù)據(jù)差錯(cuò)校驗(yàn)等工作. 有以太 網(wǎng)、令牌環(huán)網(wǎng), 無(wú)線LAN等標(biāo)準(zhǔn). 交換機(jī)(Switch)工作在數(shù)據(jù)鏈路層.
  • 網(wǎng)絡(luò)層: 負(fù)責(zé)地址管理和路由選擇. 例如在IP協(xié)議中, 通過(guò)IP地址來(lái)標(biāo)識(shí)一臺(tái)主機(jī), 并通過(guò)路由表的方式規(guī) 劃出兩臺(tái)主機(jī)之間的數(shù)據(jù)傳輸?shù)木€路(路由). 路由器(Router)工作在網(wǎng)路層.
  • 傳輸層: 負(fù)責(zé)兩臺(tái)主機(jī)之間的數(shù)據(jù)傳輸. 如傳輸控制協(xié)議 (TCP), 能夠確保數(shù)據(jù)可靠的從源主機(jī)發(fā)送到目標(biāo) 主機(jī).
  • 應(yīng)用層: 負(fù)責(zé)應(yīng)用程序間溝通,如簡(jiǎn)單電子郵件傳輸(SMTP)、文件傳輸協(xié)議(FTP)、網(wǎng)絡(luò)遠(yuǎn)程訪問(wèn) 協(xié)議(Telnet)等. 我們的網(wǎng)絡(luò)編程主要就是針對(duì)應(yīng)用層

4.為什么要有網(wǎng)絡(luò)協(xié)議?

首先,即使是一個(gè)計(jì)算機(jī),其內(nèi)部也存在各種協(xié)議,例如其他設(shè)備和內(nèi)存之間的通信協(xié)議、其他設(shè)備和磁盤(pán)的通信協(xié)議等。而網(wǎng)絡(luò)協(xié)議是為了解決計(jì)算機(jī)之間的通信,其存在的本質(zhì)原因是通信距離變遠(yuǎn)了。

例如主機(jī)A和主機(jī)B通信,但是距離較遠(yuǎn),就需要考慮許多問(wèn)題:

  • 主機(jī)A將數(shù)據(jù)傳輸給主機(jī)B,首先要將數(shù)據(jù)傳輸給路由器,怎么傳輸給路由器?
  • 網(wǎng)絡(luò)上存在大量其他主機(jī),如何定位并找到主機(jī)B?
  • 數(shù)據(jù)傳輸過(guò)程中丟失了怎么辦?
  • 主機(jī)A將數(shù)據(jù)傳輸給主機(jī)B不是目的,只是手段,主機(jī)B接收到數(shù)據(jù)后如何處理使用?

因此設(shè)計(jì)了TCP/IP通信協(xié)議,其本質(zhì)是一種解決方案。

5.網(wǎng)絡(luò)通信協(xié)議的原理

在TCP/IP通信協(xié)議分層中,其中傳輸層為T(mén)CP,網(wǎng)絡(luò)層為IP,這兩層都是在操作系統(tǒng)中實(shí)現(xiàn)C/C++語(yǔ)言實(shí)現(xiàn)的,所以對(duì)于相同的數(shù)據(jù)結(jié)構(gòu),兩臺(tái)計(jì)算機(jī)都能認(rèn)識(shí)就完成了通信。

所以通信協(xié)議的本質(zhì)是,通信雙方都認(rèn)識(shí)結(jié)構(gòu)化的數(shù)據(jù)類(lèi)型

二、網(wǎng)絡(luò)傳輸?shù)幕玖鞒?/h3>

1.局域網(wǎng)的網(wǎng)絡(luò)傳輸流程

1.MAC地址

每臺(tái)主機(jī)在局域網(wǎng)中,都要有一個(gè)唯一標(biāo)識(shí)來(lái)保證主機(jī)的唯一性,即MAC地址

MAC地址用來(lái)識(shí)別數(shù)據(jù)鏈路層中相連的節(jié)點(diǎn),長(zhǎng)度為48位(6個(gè)字節(jié)),一般使用16進(jìn)制數(shù)字加上冒號(hào)的形式來(lái)表示(例如08:00:27:03:fb:19)

MAC地址在網(wǎng)卡出廠時(shí)就確定了,不可修改,所以MAC地址是唯一的

虛擬機(jī)中的MAC地址不是真實(shí)的MAC地址,可能會(huì)與已存在的MAC地址發(fā)生沖突

2.局域網(wǎng)通信原理(以太網(wǎng)為例)

兩臺(tái)計(jì)算機(jī)在同一個(gè)以太網(wǎng)下,就可以直接通信。

如果同一個(gè)以太網(wǎng)下有多臺(tái)主機(jī),主機(jī)A給主機(jī)B傳輸數(shù)據(jù),其他所有主機(jī)包括主機(jī)B都會(huì)接收到數(shù)據(jù),但是這樣很明顯不可以。所以每個(gè)主機(jī)都會(huì)有一個(gè)MAC地址,主機(jī)A在給主機(jī)B傳輸數(shù)據(jù)時(shí)會(huì)帶上主機(jī)B的MAC地址,其他主機(jī)收到數(shù)據(jù)時(shí)對(duì)比MAC地址,不是自己的MAC地址就會(huì)丟棄數(shù)據(jù),是自己的MAC地址才會(huì)接收處理數(shù)據(jù)。

以太網(wǎng)通信特點(diǎn):

  • 以太網(wǎng)中,任何時(shí)刻只允許一臺(tái)主機(jī)向網(wǎng)絡(luò)中發(fā)送數(shù)據(jù)
  • 如果有多臺(tái)主機(jī)同時(shí)向網(wǎng)絡(luò)中發(fā)送數(shù)據(jù),就會(huì)有數(shù)據(jù)干擾,稱為數(shù)據(jù)碰撞
  • 主機(jī)在向網(wǎng)絡(luò)中發(fā)送數(shù)據(jù)之前要先進(jìn)行碰撞檢測(cè)和碰撞避免
  • 沒(méi)有交換機(jī)的情況下,以太網(wǎng)就是一個(gè)碰撞域?
3.協(xié)議的封裝和解包、分用

兩臺(tái)主機(jī)在以太網(wǎng)中通信:

每一層都有不同的協(xié)議,所以在進(jìn)行數(shù)據(jù)傳輸時(shí)每一層都要進(jìn)行封裝和解包。所謂報(bào)頭就是對(duì)應(yīng)協(xié)議層的結(jié)構(gòu)體字段,除了報(bào)頭剩下的叫做有效載荷,報(bào)頭+有效載荷=報(bào)文。

例如主機(jī)1給主機(jī)2發(fā)送數(shù)據(jù)“你好”,其數(shù)據(jù)傳輸過(guò)程以及封裝和解包的過(guò)程如下:

主機(jī)1中數(shù)據(jù)包從應(yīng)用層到網(wǎng)卡層的過(guò)程叫做封裝,封裝就是每層協(xié)議為數(shù)據(jù)包加上一個(gè)數(shù)據(jù)首部,包含了諸如首部有多長(zhǎng)、有效載荷有多長(zhǎng)、上層協(xié)議是什么等信息。

主機(jī)2中數(shù)據(jù)包從網(wǎng)卡層到應(yīng)用層的過(guò)程叫做解包,由于每層可能會(huì)有多種協(xié)議,將解包后的數(shù)據(jù)包交給哪一個(gè)協(xié)議的過(guò)程叫做分用。解包就是協(xié)議去除掉數(shù)據(jù)包相應(yīng)的首部數(shù)據(jù),再將數(shù)據(jù)包交給上層協(xié)議處理。

綜上,協(xié)議對(duì)于數(shù)據(jù)包的封裝和解包的過(guò)程,十分類(lèi)似入棧和出棧,所以協(xié)議又叫做協(xié)議棧

2. 跨網(wǎng)絡(luò)傳輸流程圖

1.IP地址

IP地址是存在于IP協(xié)議中的,用于標(biāo)識(shí)網(wǎng)絡(luò)中不同主機(jī)的地址。IP協(xié)議有兩個(gè)版本:IPv4和IPv6。

對(duì)于IPv4來(lái)說(shuō),IP地址是一個(gè)4字節(jié)(32位)的整數(shù),或者通常采用“點(diǎn)分十進(jìn)制”的字符串表示IP地址,例如 192.168.0.1 ,點(diǎn)號(hào)分割的每一個(gè)數(shù)字表示一個(gè)字節(jié),范圍是0 - 255

2.跨網(wǎng)絡(luò)通信原理

路由器連接著兩個(gè)網(wǎng)卡,即路由器連接著兩個(gè)不同的局域網(wǎng)

用戶A發(fā)送的報(bào)文經(jīng)過(guò)主機(jī)1的網(wǎng)絡(luò)層協(xié)議封裝后,發(fā)現(xiàn)目標(biāo)IP地址不是當(dāng)前局域網(wǎng)的,即報(bào)文不是發(fā)送給主機(jī)1所在的局域網(wǎng)的,所以要將報(bào)文繼續(xù)向下封裝后交給路由器,再由路由器解包到達(dá)網(wǎng)絡(luò)層發(fā)現(xiàn)目標(biāo)IP地址是自己所連接局域網(wǎng)中的IP地址,所以路由器重新封裝報(bào)文到達(dá)網(wǎng)卡層,再由路由器的網(wǎng)卡層傳輸給主機(jī)2的網(wǎng)卡層,主機(jī)2再進(jìn)行相應(yīng)的解包,完成跨網(wǎng)絡(luò)通信。

所以網(wǎng)絡(luò)層也叫IP層,網(wǎng)絡(luò)層之上包括網(wǎng)絡(luò)層不管是局域網(wǎng)通信還是跨網(wǎng)絡(luò)通信,它們的報(bào)文都是一樣的。因此使用IP地址可以屏蔽底層網(wǎng)絡(luò)的差異,提供了網(wǎng)絡(luò)虛擬層,讓所有的網(wǎng)絡(luò)都是IP網(wǎng)絡(luò)

因此無(wú)論是使用無(wú)線網(wǎng)、數(shù)據(jù)網(wǎng)或者其他網(wǎng)絡(luò),它們都可以連接網(wǎng)絡(luò)相互通信。

3.IP地址對(duì)比MAC地址

IP地址在跨網(wǎng)絡(luò)中標(biāo)識(shí)主機(jī)設(shè)備的唯一性,MAC地址只在局域網(wǎng)中標(biāo)識(shí)主機(jī)設(shè)備的唯一性

IP地址在整個(gè)路由過(guò)程中一直不變,MAC地址一直在變

IP地址是一種長(zhǎng)遠(yuǎn)目標(biāo),MAC地址是下一階段目標(biāo)

IP地址是路徑選擇的重要依據(jù),MAC地址是局域網(wǎng)轉(zhuǎn)發(fā)的重要依據(jù)

如下圖,IP地址一直不變,而MAC地址要經(jīng)過(guò)許多路由器而一直在變化:

三、Socket編程預(yù)備知識(shí)

Socket編程是傳輸層供給應(yīng)用層的編程接口,是應(yīng)用層與傳輸層之間的橋梁。

使用Socket編程可以開(kāi)發(fā)客戶機(jī)和服務(wù)器應(yīng)用程序,這些程序能夠在本地網(wǎng)絡(luò)上進(jìn)行通信,也可通過(guò)Internet在全球范圍內(nèi)通信。

1.端口號(hào)Port

主機(jī)之間通過(guò)網(wǎng)絡(luò)完成數(shù)據(jù)傳輸不是目的,真正的目的是要將數(shù)據(jù)交給系統(tǒng)中的進(jìn)程。進(jìn)程是人在系統(tǒng)中的代表,只要把數(shù)據(jù)交給進(jìn)程,就相當(dāng)于人拿到了數(shù)據(jù)。

系統(tǒng)中存在許多進(jìn)程,數(shù)據(jù)傳輸給目標(biāo)主機(jī)后需要再將數(shù)據(jù)傳給目標(biāo)進(jìn)程,這就需要唯一標(biāo)識(shí)進(jìn)程——使用端口號(hào)唯一標(biāo)識(shí)進(jìn)程。

端口號(hào)是傳輸層協(xié)議的內(nèi)容,是一個(gè)2字節(jié)16位的整數(shù)。IP地址+端口號(hào)就可以唯一標(biāo)識(shí)某一臺(tái)主機(jī)的某一個(gè)進(jìn)程。

一個(gè)進(jìn)程可以綁定多個(gè)端口號(hào),但是一個(gè)端口號(hào)只能唯一標(biāo)識(shí)一個(gè)進(jìn)程。

端口號(hào)的范圍劃分:

0-1023是知名端口號(hào),例如為HTTP、FTP、SSH等廣為使用的應(yīng)用層協(xié)議;1024-65535是操作系統(tǒng)為系統(tǒng)進(jìn)程動(dòng)態(tài)分配的端口號(hào)。

2.端口號(hào)和進(jìn)程ID的區(qū)別

端口號(hào)可以唯一標(biāo)識(shí)進(jìn)程,進(jìn)程ID也可以唯一標(biāo)識(shí)進(jìn)程,為什么不使用進(jìn)程ID來(lái)替代端口號(hào)呢?

從技術(shù)角度來(lái)說(shuō),確實(shí)可以實(shí)現(xiàn)使用進(jìn)程ID來(lái)替代端口號(hào),但是這樣會(huì)導(dǎo)致系統(tǒng)進(jìn)程管理和網(wǎng)絡(luò)強(qiáng)耦合。此外并不是所有的系統(tǒng)進(jìn)程都需要進(jìn)行網(wǎng)絡(luò)通信,只有部分進(jìn)程才需要網(wǎng)絡(luò)通信,才需要端口號(hào)。

3.理解Socket

綜上所述,IP地址用來(lái)標(biāo)識(shí)互聯(lián)網(wǎng)中唯一的一臺(tái)主機(jī),port用來(lái)標(biāo)識(shí)該主機(jī)上唯一的一個(gè)網(wǎng)絡(luò)進(jìn)程。所以IP+Port可以表示互聯(lián)網(wǎng)中唯一的一個(gè)進(jìn)程。

網(wǎng)絡(luò)通信本質(zhì)是進(jìn)程間通信,使用{srcIP, srcPort,dstIP,dstPort}這樣的4元組就能標(biāo)識(shí)互聯(lián)網(wǎng)中唯二的兩個(gè)進(jìn)程。

IP+Port叫做套接字Socket

4.認(rèn)識(shí)傳輸層中的典型協(xié)議

1.TCP(Transmission Control Protocol 傳輸控制協(xié)議):

有連接、可靠傳輸、面向字節(jié)流

2.UDP(UserDatagramProtocol 用戶數(shù)據(jù)報(bào)協(xié)議):

無(wú)連接、不可靠傳輸、面向數(shù)據(jù)報(bào)

5.網(wǎng)絡(luò)字節(jié)序

計(jì)算機(jī)中的字節(jié)數(shù)據(jù)有大端和小端存儲(chǔ)方式之分,所以網(wǎng)絡(luò)數(shù)據(jù)流同樣也會(huì)有大小端之分。如果一個(gè)采用大端存儲(chǔ)方式的機(jī)器向一個(gè)采用小端存儲(chǔ)的機(jī)器發(fā)送數(shù)據(jù),就會(huì)產(chǎn)生錯(cuò)誤。

因此TCP/IP協(xié)議規(guī)定:網(wǎng)絡(luò)數(shù)據(jù)流必須采用大端字節(jié)序!即從網(wǎng)絡(luò)中讀取到的數(shù)據(jù)流一定是大端字節(jié)序的,因此我們還需要進(jìn)行網(wǎng)絡(luò)字節(jié)序和主機(jī)字節(jié)序的轉(zhuǎn)換。

因?yàn)榘l(fā)送主機(jī)通常會(huì)緩沖區(qū)的數(shù)據(jù)按照內(nèi)存地址從低到高的順序發(fā)出,接收主機(jī)將從網(wǎng)絡(luò)中接收到的字節(jié)保存在緩沖區(qū)同樣是按照內(nèi)存地址由低到高保存,先將數(shù)據(jù)保存到低地址再到高地址。例如數(shù)據(jù)0x1234abcd,發(fā)送主機(jī)按照0x12 0x34 0xab 0xcd順序發(fā)出,接收主機(jī)將這些數(shù)據(jù)按照接收順序?qū)⑺鼈円来未鎯?chǔ)在緩沖區(qū)的低地址到高地址:0x12 0x34 0xab 0xcd。這正好符合大端存儲(chǔ)模式,所以規(guī)定網(wǎng)絡(luò)數(shù)據(jù)流必須采用大端字節(jié)序,對(duì)于采用小端存儲(chǔ)模式的機(jī)器要先將數(shù)據(jù)轉(zhuǎn)換為大端存儲(chǔ)模式再發(fā)送。

?接下來(lái)是網(wǎng)絡(luò)字節(jié)序和主機(jī)字節(jié)序轉(zhuǎn)換的庫(kù)函數(shù):

6.Socket編程接口

頭文件:#include <sys/types.h> #include <sys/socket.h>

(1)創(chuàng)建 socket 文件描述符(TCP/UDP, 客戶端 + 服務(wù)器)

int socket(int domain, int type, int protocol);

創(chuàng)建一個(gè)套接字系統(tǒng)調(diào)用,相當(dāng)于打開(kāi)了網(wǎng)卡

domain:指定協(xié)議族,常見(jiàn)協(xié)議族包括

  • AF_INET:IPv4 協(xié)議族。
  • AF_INET6:IPv6 協(xié)議族。
  • AF_UNIX?或?AF_LOCAL:本地進(jìn)程間通信(IPC)。
  • AF_UNSPEC:未指定協(xié)議族。

type:指定套接字類(lèi)型,常見(jiàn)套接字類(lèi)型包括

  • SOCK_STREAM:流式套接字,用于面向連接的 TCP 服務(wù)。
  • SOCK_DGRAM:數(shù)據(jù)報(bào)套接字,用于無(wú)連接的 UDP 服務(wù)。
  • SOCK_RAW:原始套接字,允許直接操作 IP 層或更低層的協(xié)議。

protocol:通常設(shè)置為0,表示選擇默認(rèn)協(xié)議

返回值:成功返回一個(gè)非負(fù)文件描述符(可用于后續(xù)套接字操作:綁定、監(jiān)聽(tīng)、連接、發(fā)送和接收);失敗返回 -1,并設(shè)置全局變量?errno?以指示錯(cuò)誤類(lèi)型。

關(guān)于文件描述符:Linux系統(tǒng)中一切皆文件,創(chuàng)建套接字相當(dāng)于打開(kāi)了網(wǎng)卡設(shè)備,網(wǎng)課也是一個(gè)文件,所有返回的相當(dāng)于是網(wǎng)卡的文件描述符。

(2)綁定端口號(hào) (TCP/UDP, 服務(wù)器)

int bind(int socket, const struct sockaddr *address, socklen_t address_len);

將一個(gè)套接字與一個(gè)特定的地址綁定(通常是IP地址和端口號(hào)),當(dāng)這個(gè)套接字用于網(wǎng)絡(luò)通信時(shí)就可以將數(shù)據(jù)發(fā)送到綁定的地址中,或者從綁定的地址中接收數(shù)據(jù)。

套接字將監(jiān)聽(tīng)發(fā)送到其綁定地址的數(shù)據(jù)。

socket:文件描述符

address:指向sockaddr結(jié)構(gòu)體的指針,結(jié)構(gòu)體中包含了要綁定的地址信息。sockaddr通常有sockaddr_in(IPv4)、sockaddr_in6(IPv6)、sockaddr_un

address_len:address指向的結(jié)構(gòu)體的長(zhǎng)度

返回值:成功返回0,失敗返回-1并設(shè)置全局變量?errno?來(lái)指示錯(cuò)誤類(lèi)型。

(3)開(kāi)始監(jiān)聽(tīng)socket (TCP, 服務(wù)器)

int listen(int socket, int backlog);

(4)接收請(qǐng)求 (TCP, 服務(wù)器)

int accept(int socket, struct sockaddr* address, socklen_t* address_len);

(5)建立連接 (TCP, 客戶端)

int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

(6)接收數(shù)據(jù)(UDP,服務(wù)端)

ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen_t *addrlen);

在UDP協(xié)議通信時(shí),使用recvfrom函數(shù)接收來(lái)自發(fā)送到套接字綁定地址的數(shù)據(jù)包,并將接收到的數(shù)據(jù)包存儲(chǔ)在緩沖區(qū)buf中

sockfd:文件描述符

buf:用于存儲(chǔ)接收到的數(shù)據(jù)包

len:緩沖區(qū)的大小

flags:標(biāo)志位,通常設(shè)置為0,可以修改為其他標(biāo)志位例如MSG_PEEK?標(biāo)志允許你查看數(shù)據(jù)而不從隊(duì)列中移除它

src_addr:存儲(chǔ)源地址信息,即從哪里接收到的數(shù)據(jù)包(輸入輸出型參數(shù))

addrlen:存儲(chǔ)src_addr中地址的長(zhǎng)度

返回值:成功返回接收到的數(shù)據(jù)字節(jié)數(shù),失敗返回-1,并設(shè)置?errno?以指示錯(cuò)誤類(lèi)型

(7)發(fā)送數(shù)據(jù)sendto

ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);

將數(shù)據(jù)發(fā)送到指定的地址(IP地址+端口號(hào))

sockfd:文件描述符

buf:指向發(fā)送數(shù)據(jù)所在緩沖區(qū)的指針

len:要發(fā)送數(shù)據(jù)所在緩沖區(qū)的大小

flags:標(biāo)志位,通常設(shè)置為0,可以設(shè)置為其他值以改變發(fā)送行為,如MSG_DONTROUTE(指出數(shù)據(jù)不提交給路由選擇)

dest_addr:發(fā)送的目標(biāo)地址

addrlen:存儲(chǔ)dest_addr中地址的長(zhǎng)度

返回值:成功返回發(fā)送數(shù)據(jù)的字節(jié)數(shù),失敗返回-1并設(shè)置全局變量errno以指示錯(cuò)誤原因

(8)關(guān)閉網(wǎng)絡(luò)套接字

#include <unistd.h>

int close(int fd);

返回值:成功返回0,失敗返回?-1并設(shè)置全局變量?errno?以指示錯(cuò)誤原因

7.關(guān)于sockaddr結(jié)構(gòu)體

頭文件:#include <netinet/in.h> #include <arpa/inet.h>

#include <sys/socket.h>
struct sockaddr {sa_family_t sa_family; // 地址族char        sa_data[14]; // 地址數(shù)據(jù),具體含義取決于地址族
};

struct sockaddr是一個(gè)通用的套接字結(jié)構(gòu)體,它包含了地址族(sa_family)和地址數(shù)據(jù)(sa_data)等信息,但是struct sockaddr沒(méi)有針對(duì)特定協(xié)議進(jìn)行詳細(xì)劃分(例如IPv4、IPv6 或 UNIX域 ),因此直接使用struct sockaddr會(huì)導(dǎo)致編程上的復(fù)雜和錯(cuò)誤。

因此引入了struct sockaddr_in和struct sockaddr_un,但是它們的第一個(gè)字段都是相同的sa_family_t類(lèi)型,所以為了兼容性和靈活性,需要將struct sockaddr_in和struct sockaddr_un強(qiáng)制類(lèi)型轉(zhuǎn)換為struct sockaddr類(lèi)型,再傳給系統(tǒng)調(diào)用。

補(bǔ)充:地址族sa_family的作用:指定套接字通信的協(xié)議類(lèi)型(IPv4、IPv6、UNIX域)

(1)struct sockaddr_in

專(zhuān)門(mén)用于IPv4網(wǎng)絡(luò)通信

將地址數(shù)據(jù)sa_data細(xì)分為:端口號(hào)sin_port、IP地址sin_addr、填充字節(jié)sin_zero等信息

#include <netinet/in.h>
struct sockaddr_in {sa_family_t    sin_family; // 地址族,對(duì)于 IPv4 來(lái)說(shuō)是 AF_INETuint16_t       sin_port;   // 端口號(hào),使用網(wǎng)絡(luò)字節(jié)序(大端序)struct in_addr sin_addr;   // IPv4 地址char           sin_zero[8];//填充字節(jié),確保結(jié)構(gòu)體大小與 sockaddr 一致
};
// 其中 struct in_addr 是一個(gè)嵌套的結(jié)構(gòu)體,通常定義如下:
struct in_addr {uint32_t s_addr; // IPv4 地址,要使用網(wǎng)絡(luò)字節(jié)序
};
(2)struct sockaddr_un

專(zhuān)門(mén)用于UNIX域套接字通信(同一臺(tái)機(jī)器中的進(jìn)程通信)

結(jié)構(gòu)體中包括:地址族sun_family、套接字路徑名sun_path等信息

#include <sys/un.h>
struct sockaddr_un {sa_family_t sun_family; // 地址族,對(duì)于 UNIX 域套接字來(lái)說(shuō)是 AF_UNIX 或 AF_LOCALchar        sun_path[108]; // 套接字路徑名
};

http://www.risenshineclean.com/news/61733.html

相關(guān)文章:

  • 網(wǎng)頁(yè)建設(shè)類(lèi)有哪些軟件seo營(yíng)銷(xiāo)
  • 織夢(mèng)手機(jī)網(wǎng)站制作教程seo站長(zhǎng)平臺(tái)
  • ts wordpress網(wǎng)站優(yōu)化建議
  • 網(wǎng)站流量 名詞洛陽(yáng)seo網(wǎng)絡(luò)推廣
  • wordpress更改前端引用關(guān)鍵詞優(yōu)化軟件哪家好
  • 阿里巴巴網(wǎng)站圖片怎么做國(guó)際時(shí)事新聞2022最新
  • 旅游網(wǎng)站開(kāi)發(fā)團(tuán)隊(duì)百度廣告投放代理商
  • 南充網(wǎng)站建設(shè)公司seo 公司
  • 南通做網(wǎng)站的推廣普通話的文字內(nèi)容
  • 中國(guó)建設(shè)銀行新聞網(wǎng)站最近一周熱點(diǎn)新聞
  • 手機(jī)端企業(yè)網(wǎng)站源碼下載推廣產(chǎn)品的方式有哪些
  • notepad做網(wǎng)站網(wǎng)絡(luò)seo啥意思
  • 局域網(wǎng)網(wǎng)站開(kāi)發(fā)濟(jì)南seo外包公司
  • 外包網(wǎng)站建設(shè)費(fèi)用包括網(wǎng)站備份如何制作網(wǎng)頁(yè)鏈接教程
  • wordpress 制作模板seo優(yōu)化培訓(xùn)多少錢(qián)
  • asp網(wǎng)站 seob站推廣入口2023
  • 專(zhuān)做短篇的網(wǎng)站百度站長(zhǎng)工具域名查詢
  • 建網(wǎng)站程序怎么寫(xiě)中小型企業(yè)網(wǎng)站設(shè)計(jì)與開(kāi)發(fā)
  • 網(wǎng)站開(kāi)發(fā)常見(jiàn)畢業(yè)設(shè)計(jì)題目互聯(lián)網(wǎng)營(yíng)銷(xiāo)顧問(wèn)
  • 建設(shè)銀行網(wǎng)站點(diǎn)擊次數(shù)百度風(fēng)云榜游戲
  • wordpress調(diào)用7天熱門(mén)文章seo優(yōu)化交流
  • 網(wǎng)站中文域名好嗎廣州seo推廣培訓(xùn)
  • 完備的網(wǎng)站建設(shè)怎么找百度客服
  • 下載中心免費(fèi)下載seo搜索引擎優(yōu)化方案
  • 公司名被注冊(cè)網(wǎng)站網(wǎng)站seo優(yōu)化檢測(cè)
  • 哪里有免費(fèi)的ppt模板下載網(wǎng)站免費(fèi)seo教程資源
  • 大型自適應(yīng)的網(wǎng)站開(kāi)發(fā)互動(dòng)營(yíng)銷(xiāo)案例100
  • 做旅游的網(wǎng)站的目的和意義什么是引流推廣
  • 網(wǎng)站建設(shè)就問(wèn)山東聚搜網(wǎng)絡(luò)f南寧網(wǎng)絡(luò)推廣有幾家
  • 企業(yè)自己做網(wǎng)站營(yíng)銷(xiāo)培訓(xùn)心得體會(huì)