久久久久免费精品人妻一区二区,国语自产拍在线观看91,中文字幕无码视频专区在线播放,欧美亚洲国产电影在线观看,精品无码av不卡一区二区三区,九九色高清在线视频免费观看

工業(yè)路由器

TCP和UDP的區(qū)別和優(yōu)缺點

發(fā)布時間:2020-07-21瀏覽:1916

一、TCP與UDP區(qū)別總結:


1、TCP面向連接(如打電話要先撥號建立連接);UDP是無連接的,即發(fā)送數(shù)據(jù)之前不需要建立連接


2、TCP提供可靠的服務。也就是說,通過TCP連接傳送的數(shù)據(jù),無差錯,不丟失,不重復,且按序到達;UDP盡最大努力交付,即不保證可靠交付


Tcp通過校驗和,重傳控制,序號標識,滑動窗口、確認應答實現(xiàn)可靠傳輸。如丟包時的重發(fā)控制,還可以對次序亂掉的分包進行順序控制。


3、UDP具有較好的實時性,工作效率比TCP高,適用于對高速傳輸和實時性有較高的通信或廣播通信。


4.每一條TCP連接只能是點到點的;UDP支持一對一,一對多,多對一和多對多的交互通信


5、TCP對系統(tǒng)資源要求較多,UDP對系統(tǒng)資源要求較少。



二、為什么UDP有時比TCP更有優(yōu)勢?


UDP以其簡單、傳輸快的優(yōu)勢,在越來越多場景下取代了TCP,如實時游戲。


(1)網(wǎng)速的提升給UDP的穩(wěn)定性提供可靠網(wǎng)絡保障,丟包率很低,如果使用應用層重傳,能夠確保傳輸?shù)目煽啃浴?/span>


(2)TCP為了實現(xiàn)網(wǎng)絡通信的可靠性,使用了復雜的擁塞控制算法,建立了繁瑣的握手過程,由于TCP內(nèi)置的系統(tǒng)協(xié)議棧中,極難對其進行改進。


采用TCP,一旦發(fā)生丟包,TCP會將后續(xù)的包緩存起來,等前面的包重傳并接收到后再繼續(xù)發(fā)送,延時會越來越大,基于UDP對實時性要求較為嚴格的情況下,采用自定義重傳機制,能夠把丟包產(chǎn)生的延遲降到最低,盡量減少網(wǎng)絡問題對游戲性造成影響。




三、UDP和TCP編程步驟也有些不同,如下:


TCP: 


TCP編程的服務器端一般步驟是: 
  1、創(chuàng)建一個socket,用函數(shù)socket();     SOCKET SocketListen =socket(AF_INET,SOCK_STREAM, IPPROTO_TCP);
  2、設置socket屬性,用函數(shù)setsockopt(); * 可選 
  3、綁定IP地址、端口等信息到socket上,用函數(shù)bind(); SOCKET_ERROR = bind(SocketListen,(const sockaddr*)&addr,sizeof(addr))
  4、開啟監(jiān)聽,用函數(shù)listen();                 SOCKET_ERROR == listen(SocketListen,2)
  5、接收客戶端上來的連接,用函數(shù)accept();    SOCKET SocketWaiter = accept(SocketListen,


                                                  _Out_    struct sockaddr *addr


 _Inout_  int *addrlen);
  6、收發(fā)數(shù)據(jù),用函數(shù)send()和recv(),或者read()和write(); 
  7、關閉網(wǎng)絡連接; closesocket(SocketListen);closesocket(SocketWaiter);
  8、關閉監(jiān)聽; 

SOCK_STREAM這種的特點是面向連接的,即每次收發(fā)數(shù)據(jù)之前必須通過connect建立連接,而SOCK_DGRAM這種是User Datagram Protocol協(xié)議的網(wǎng)絡通訊,它是無連接的,不可靠的。


TCP編程的客戶端一般步驟是: 


  1、創(chuàng)建一個socket,用函數(shù)socket(); 
  2、設置socket屬性,用函數(shù)setsockopt();* 可選 
  3、綁定IP地址、端口等信息到socket上,用函數(shù)bind();* 可選 
  4、設置要連接的對方的IP地址和端口等屬性; 
  5、連接服務器,用函數(shù)connect(); 
  6、收發(fā)數(shù)據(jù),用函數(shù)send()和recv(),或者read()和write(); 
  7、關閉網(wǎng)絡連接;


int send(
  _In_  SOCKET s,         //向哪個socket發(fā)送,accept返回的socket。
  _In_  const char *buf,
  _In_  int len,
  _In_  int flags
);                               由于
send(SocketClient,(const char *)&fh,sizeof(fh),0);

recv(SocketClient,szbuf,sizeof(szbuf),0);



UDP:


與之對應的UDP編程步驟要簡單許多,分別如下: 
  UDP編程的服務器端一般步驟是: 
  1、創(chuàng)建一個socket,用函數(shù)socket(); 
  2、設置socket屬性,用函數(shù)setsockopt();* 可選 
  3、綁定IP地址、端口等信息到socket上,用函數(shù)bind(); 
  4、循環(huán)接收數(shù)據(jù),用函數(shù)recvfrom(); 
  5、關閉網(wǎng)絡連接; 


UDP編程的客戶端一般步驟是: 
  1、創(chuàng)建一個socket,用函數(shù)socket(); 
  2、設置socket屬性,用函數(shù)setsockopt();* 可選 
  3、綁定IP地址、端口等信息到socket上,用函數(shù)bind();* 可選 
  4、設置對方的IP地址和端口等屬性; 
  5、發(fā)送數(shù)據(jù),用函數(shù)sendto(); 
  6、關閉網(wǎng)絡連接;




int recvfrom(
  _In_         SOCKET s,       //綁定的socket
  _Out_        char *buf,
  _In_         int len,
  _In_         int flags,
  _Out_        struct sockaddr *from,  //用來接收對方的
  _Inout_opt_  int *fromlen
);
int nres=recvfrom(pThis->m_socketListen,szBuf,sizeof(szBuf),0,(sockaddr*)&addrClient,&nSize);//0處標志位
sendto(m_socketListen,szBuffer,nSize,0,(const sockaddr*)&addr,sizeof(sockaddr_in))
TCP和UDP是OSI模型中的運輸層中的協(xié)議。TCP提供可靠的通信傳輸,而UDP則常被用于讓廣播和細節(jié)控制交給應用的通信傳輸。


4、將socket設置為廣播屬性
bool optval=true;
setsockopt(m_socketListen,SOL_SOCKET,SO_BROADCAST,(const char *)&optval,sizeof(bool));


5、將Socket設置為非阻塞。
//bool benable=true;
//ioctlsocket(m_socketListen,FIONBIO,(u_long*)&benable);


6、Tcp頭,20字節(jié)


211656003971.png

7、UDP首部,8個字節(jié)

211656229818.png


上一篇:一文搞懂TCP與UDP有什么區(qū)別 下一篇:什么是LoRa協(xié)議?
免費樣機申請 樣機免費試用,提前溝通確保愛陸通產(chǎn)品深度契合貴司業(yè)務需求
  • *您的姓名:
  • *手機號碼:
  • *公司名稱:
  • 您的職位:
  • 您的郵箱:
  • 您的QQ:
相關產(chǎn)品
產(chǎn)品百科
隱私政策網(wǎng)站地圖 Copyright ? 2015-2022 廈門愛陸通通信科技有限公司 All Rights Reserved.   閩ICP備15018514號
在線咨詢 撥打電話
绥中县| 姜堰市| 宣恩县| 棋牌| 屏山县| 新和县| 四子王旗| 繁峙县| 凯里市| 灵川县| 东城区| 孝义市| 富民县| 黄大仙区| 甘孜县| 墨江| 襄垣县| 特克斯县| 年辖:市辖区| 厦门市| 平昌县| 西青区| 荥经县| 子长县| 东阿县| 西乌珠穆沁旗| 开化县| 夹江县| 芜湖县| 盘山县| 九龙城区| 宜良县| 平度市| 金平| 中西区| 时尚| 沭阳县| 曲周县| 应用必备| 江川县| 台州市|