国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

[C++ 網(wǎng)絡協(xié)議編程] UDP協(xié)議

這篇具有很好參考價值的文章主要介紹了[C++ 網(wǎng)絡協(xié)議編程] UDP協(xié)議。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

1. UDP和TCP的區(qū)別

2. UDP的工作原理

3. UDP存在數(shù)據(jù)邊界

4. UDP的I/O函數(shù)

4.1 sendto函數(shù)

4.2 recvfrom函數(shù)

4. 已連接(connected)UDP套接字和未連接(unconnected)UDP套接字

5. UDP的通信流程

5.1 服務器端通信流程

5.2 客戶端通信流程


1. UDP和TCP的區(qū)別

主要區(qū)別:

  1. TCP和UDP的主要區(qū)別是,TCP具有流控制機制,而UDP沒有。
  2. UDP性能比TCP高,在數(shù)據(jù)量大的情況下,TCP的性能會接近UDP的性能,但無法超過UDP。

TCP比UDP慢的原因主要如下:

??????? 1. 收發(fā)數(shù)據(jù)前后進行的連接設置及清除過程

??????? 2. 收發(fā)數(shù)據(jù)過程中為保證可靠性而添加的流控制

???? 3. UDP不如TCP可靠,有可能會發(fā)生數(shù)據(jù)的丟失。

2. UDP的工作原理

[C++ 網(wǎng)絡協(xié)議編程] UDP協(xié)議,網(wǎng)絡協(xié)議,網(wǎng)絡協(xié)議,udp,網(wǎng)絡,c++

如圖,IP的作用是讓數(shù)據(jù)準確傳到主機A,而UDP的最重要的作用就是把數(shù)據(jù)準確的傳到主機A的指定套接字上

3. UDP存在數(shù)據(jù)邊界

為什么說UDP存在數(shù)據(jù)邊界?

因為:

??????? 1.與TCP不同,UDP的通信過程中,I/O函數(shù)的調用次數(shù)必須保持一致,即客戶端sendto了幾次,服務器端也要recvfrom幾次。

??????? 2.同時也因為UDP每次傳輸?shù)臄?shù)據(jù)包又稱為UDP數(shù)據(jù)報,數(shù)據(jù)報也是數(shù)據(jù)包的一種,不同的是,UDP數(shù)據(jù)報本身可以成為1個完整的數(shù)據(jù),而TCP的一個完整的數(shù)據(jù)可以由多個數(shù)據(jù)包組成。

4. UDP的I/O函數(shù)

4.1 sendto函數(shù)

#include<sys/socket.h>
ssize_t sendto(
int sock,                     //用于傳輸數(shù)據(jù)的UDP套接字文件描述符
void *buff,                   //保存待傳輸數(shù)據(jù)的緩沖地址值
size_t nbytes,                //待傳輸?shù)臄?shù)據(jù)長度,以字節(jié)為單位
int flags,                    //可選項參數(shù),沒有就設置為0
struct sockaddr* to,          //存有目標地址信息的sockaddr結構體變量的地址值
socklen_t addrlen             //傳遞給參數(shù)to的地址值結構體變量長度
);
成功返回傳輸?shù)淖止?jié)數(shù),失敗返回-1

UDP的套接字不會保持連接狀態(tài),因此每次傳輸數(shù)據(jù)都要添加目標地址信息。

4.2 recvfrom函數(shù)

#include<sys/socket.h>
ssize_t recvfrom(
int sock,                //用于接收數(shù)據(jù)的UDP套接字文件描述符
void* buff,              //保存接收數(shù)據(jù)的緩沖地址值
size_t nbytes,           //可接受的最大字節(jié)數(shù),無法超過buff的大小
int flags,               //可選項參數(shù),沒有則傳0
struct sockaddr* from,   //存有發(fā)送端地址信息的sockaddr結構體變量的地址值
socklen_t *addrlen       //保存參數(shù)from的結構體變量長度的地址值
);

4. 已連接(connected)UDP套接字和未連接(unconnected)UDP套接字

已連接UDP套接字:執(zhí)行了connect函數(shù)或bind函數(shù),套接字綁定了某主機IP和端口號

未連接UDP套接字:未執(zhí)行connect函數(shù)或bind函數(shù),套接字在每次執(zhí)行sendto函數(shù)時,再綁定某主機IP和端口號。

UDP中通過sendto函數(shù)傳輸數(shù)據(jù)可分為三個階段:

  1. 第一階段:向UDP套接字注冊目標IP和端口號
  2. 第二階段:傳輸數(shù)據(jù)
  3. 第三階段:刪除UDP套接字中注冊的目標信息地址

所以,未連接UDP套接字,可以重復利用同一個UDP套接字,向不同主機傳輸數(shù)據(jù)。但如果你每次都是向同一個主機傳輸多次,那么上述階段會重復多次,這樣會大大的消耗程序性能,因為sendto函數(shù)的第一階段和第三階段占整個通信過程的1/3,所以,這種情況下,你可以使用已連接套接字,在sendto函數(shù)前就先調用connect函數(shù)或bind函數(shù),綁定IP和端口號,這樣sendto函數(shù)就會節(jié)省第一階段和第二階段的時間,提高程序效率。

5. UDP的通信流程

5.1 服務器端通信流程

第一步:使用socket函數(shù)創(chuàng)建套接字

第二步:使用bind函數(shù)綁定IP地址和端口號(可以省略這一步,但如果是多次要與同一個主機通信,那么增加這一步可以增加性能

第三步:使用sendto(或write)發(fā)送信息或recvfrom(或recv)接收信息(能使用send和recv的前提是已連接UDP套接字

第四步:關閉套接字

和TCP不一樣,UDP無需執(zhí)行l(wèi)isten,accept函數(shù),可以不執(zhí)行bind函數(shù)。

5.2 客戶端通信流程

第一步:使用socket函數(shù)創(chuàng)建套接字

第二步:使用connect函數(shù)連接IP地址和端口號(可以省略這一步,但如果是多次要與同一個主機通信,那么增加這一步可以增加性能

第三步:使用sendto(或write)發(fā)送信息或recvfrom(或recv)接收信息(能使用send和recv的前提是已連接UDP套接字

第四步:關閉套接字

和TCP不一樣,UDP可以不執(zhí)行connect函數(shù),連接服務器端。文章來源地址http://www.zghlxwxcb.cn/news/detail-650037.html

到了這里,關于[C++ 網(wǎng)絡協(xié)議編程] UDP協(xié)議的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包