沐鸣娱乐官方平台下载-沐鸣娱乐官方平台手机下载

工业路由器
您(nin)当(dang)前位置: 首页 >> 服务与支持 >> 产品百科 >> 工业路由器

TCP和UDP的区别和优缺点

发布(bu)时间:2020-07-21浏览:1932

一、TCP与UDP区别总结:


1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即(ji)发送(song)数据(ju)之前(qian)不需(xu)要建立连接


2、TCP提供可靠的服务。也就是说(shuo),通过(guo)TCP连接传送的数据,无差(cha)错,不(bu)丢(diu)失,不(bu)重复,且(qie)按序到达;UDP尽最大努力交(jiao)(jiao)付,即不(bu)保证可靠交(jiao)(jiao)付


Tcp通过校(xiao)验和(he),重(zhong)传控制(zhi),序号标识,滑(hua)动(dong)窗口、确认应答(da)实现可靠传输。如丢(diu)包(bao)时的重(zhong)发控制(zhi),还可以对次序乱掉的分包(bao)进行顺(shun)序控制(zhi)。


3、UDP具有较好的实(shi)时性,工作效率比TCP高,适用于对高速传输和(he)实(shi)时性有较高的通(tong)信(xin)或广(guang)播通(tong)信(xin)。


4.每一(yi)条TCP连接只能是点到点的(de)(de);UDP支持一(yi)对(dui)一(yi),一(yi)对(dui)多(duo),多(duo)对(dui)一(yi)和(he)多(duo)对(dui)多(duo)的(de)(de)交互(hu)通信


5、TCP对系统资源(yuan)要求较多(duo),UDP对系统资源(yuan)要求较少。



二、为什么UDP有时比TCP更有优势?


UDP以其简(jian)单、传(chuan)输快的(de)优(you)势(shi),在越来(lai)越多(duo)场景(jing)下取代了(le)TCP,如实时游戏。


(1)网速(su)的(de)提(ti)升给(ji)UDP的(de)稳定性提(ti)供(gong)可靠(kao)网络保障(zhang),丢(diu)包率很低(di),如(ru)果使用应用层重传,能(neng)够(gou)确保传输的(de)可靠(kao)性。


(2)TCP为了实现网(wang)络(luo)通(tong)信的可靠性,使用(yong)了复杂的拥塞控制算法,建(jian)立了繁琐的握(wo)手过程,由(you)于TCP内置的系统协议栈中,极(ji)难(nan)对其进行改进。


采用(yong)(yong)TCP,一(yi)旦发生丢包,TCP会(hui)将(jiang)后(hou)续(xu)的包缓存(cun)起(qi)来,等(deng)前面的包重(zhong)传并接收到(dao)后(hou)再继续(xu)发送,延时会(hui)越(yue)来越(yue)大,基于UDP对(dui)实时性要求较为严格的情(qing)况下,采用(yong)(yong)自(zi)定义重(zhong)传机制,能够把(ba)丢包产生的延迟(chi)降到(dao)最低,尽量减少网络问题对(dui)游戏性造(zao)成影(ying)响。




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


TCP: 


TCP编(bian)程的服务器端一般步骤是(shi): 
  1、创建(jian)一个socket,用函数(shu)socket();     SOCKET SocketListen =socket(AF_INET,SOCK_STREAM, IPPROTO_TCP);
  2、设置socket属性,用函数setsockopt(); * 可选 
  3、绑定IP地址(zhi)、端(duan)口(kou)等信息到socket上,用函(han)数bind(); SOCKET_ERROR = bind(SocketListen,(const sockaddr*)&addr,sizeof(addr))
  4、开启监(jian)听,用函数listen();                 SOCKET_ERROR == listen(SocketListen,2)
  5、接收客户端(duan)上来的连接,用函数(shu)accept();    SOCKET SocketWaiter = accept(SocketListen,


                                                  _Out_    struct sockaddr *addr


 _Inout_  int *addrlen);
  6、收(shou)发数(shu)(shu)据(ju),用函数(shu)(shu)send()和(he)(he)recv(),或者read()和(he)(he)write(); 
  7、关闭网(wang)络连(lian)接; closesocket(SocketListen);closesocket(SocketWaiter);
  8、关闭监听; 

SOCK_STREAM这种(zhong)(zhong)的特点是面向连接的,即每(mei)次收发(fa)数据之(zhi)前必(bi)须通(tong)过connect建(jian)立连接,而(er)SOCK_DGRAM这种(zhong)(zhong)是User Datagram Protocol协议的网络通(tong)讯,它是无连接的,不可靠的。


TCP编程的客户端一般步骤是: 


  1、创建一个socket,用函数(shu)socket(); 
  2、设置socket属(shu)性,用(yong)函数setsockopt();* 可选(xuan) 
  3、绑定(ding)IP地(di)址、端(duan)口(kou)等(deng)信(xin)息(xi)到socket上,用函数bind();* 可选 
  4、设置要连接的(de)对方的(de)IP地(di)址和端口等(deng)属性(xing); 
  5、连接服务器,用函数connect(); 
  6、收发数据,用函数send()和(he)recv(),或者read()和(he)write(); 
  7、关闭网(wang)络连接(jie);


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

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



UDP:


与(yu)之对应的UDP编程步(bu)骤要简单许(xu)多,分别如下: 
  UDP编(bian)程的服务器端(duan)一般步骤是: 
  1、创建一(yi)个socket,用(yong)函数(shu)socket(); 
  2、设置socket属(shu)性,用函(han)数setsockopt();* 可选(xuan) 
  3、绑定IP地址、端口等信(xin)息到socket上,用函数bind(); 
  4、循环接收(shou)数(shu)据,用函数(shu)recvfrom(); 
  5、关闭网络连接; 


UDP编(bian)程(cheng)的客户端一般步(bu)骤是: 
  1、创建一个socket,用函数(shu)socket(); 
  2、设置(zhi)socket属性,用函(han)数setsockopt();* 可(ke)选 
  3、绑定IP地址、端口等信息到(dao)socket上,用函数(shu)bind();* 可选 
  4、设置对方的IP地址和端口等属性; 
  5、发送数据,用函数sendto(); 
  6、关闭(bi)网络连接(jie);




int recvfrom(
  _In_         SOCKET s,       //绑定(ding)的socket
  _Out_        char *buf,
  _In_         int len,
  _In_         int flags,
  _Out_        struct sockaddr *from,  //用来接收(shou)对方的
  _Inout_opt_  int *fromlen
);
int nres=recvfrom(pThis->m_socketListen,szBuf,sizeof(szBuf),0,(sockaddr*)&addrClient,&nSize);//0处标(biao)志(zhi)位
sendto(m_socketListen,szBuffer,nSize,0,(const sockaddr*)&addr,sizeof(sockaddr_in))
TCP和UDP是OSI模(mo)型中的运输(shu)层中的协议(yi)。TCP提供(gong)可靠的通(tong)信(xin)传输(shu),而UDP则常被用于让(rang)广播(bo)和细(xi)节控制交(jiao)给应用的通(tong)信(xin)传输(shu)。


4、将(jiang)socket设置(zhi)为广播属(shu)性
bool optval=true;
setsockopt(m_socketListen,SOL_SOCKET,SO_BROADCAST,(const char *)&optval,sizeof(bool));


5、将Socket设(she)置(zhi)为非阻(zu)塞。
//bool benable=true;
//ioctlsocket(m_socketListen,FIONBIO,(u_long*)&benable);


6、Tcp头,20字(zi)节




7、UDP首部(bu),8个字节


上一篇:一文搞懂TCP与UDP有什么区别 下一篇:什么是LoRa协议?
免费样机申(shen)请 样机免费试用,提前沟通确保沐鸣娱乐产品深度契合贵司业务需求
相关产品
产品百科
隐私政策网站地图  Copyright © 2015-2022 厦门沐鸣娱(yu)乐通(tong)信科技有限公司 All Rights Reserved.  
拨(bo)打电话
极悦娱乐-科技赋能场景,让娱乐更有趣。 极悦娱乐-科技注册场景,让平台更有趣。 鼎点耀世娱乐HEMO-拉菲2娱乐「一家靠谱的游戏平台」Facai-新博2官网登录入口「一家靠谱的游戏平台」Facai-摩臣平台是正规平台吗「一家走心的游戏平台」