网络编程-TCP与UDP

1.定义区别

TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于传输层协议。其中TCP提供IP环境下的数据可靠传输,它提供的服务包括数据流传送、可靠性、有效流控、全双工操作和多路复用。通过面向连接、端到端和可靠的数据包发送。通俗说,它是事先为所发送的数据开辟出连接好的通道,然后再进行数据发送;

UDP则不为IP提供可靠性、流控或差错恢复功能。一般来说,TCP对应的是可靠性要求高的应用,而UDP对应的则是可靠性要求低、传输经济的应用。TCP支持的应用协议主要有:Telnet、FTP、SMTP等;UDP支持的应用层协议主要有:NFS(网络文件系统)、SNMP(简单网络管理协议)、DNS(主域名称系统)、TFTP(通用文件传输协议)等。

TCP:“面向连接”就是在正式通信前必须要与对方建立起连接。比如你给别人打电话,必须等线路接通了、对方拿起话筒才能相互通话。

UDP(User Data Protocol, 用户数据报协议)是与TCP相对应的协议。它是 面向非连接的协议,它不与对方建立连接,而是直接就把 数据包发送过去!“面向非连接”就是在正式通信前不必与对方先建立连接,不管对方状态就直接发送。与手机短信非常相似:你在发短信的时候,只需要输入对方手机号就OK了。

协议差别

编辑

tcp协议和udp协议的差别

[这里是图片001]

TCP协议和UDP协议各有所长、各有所短,适用于不同要求的通信环境。TCP协议和UDP协议之间的差别如附表所示。

1、TCP与UDP区别总结:

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

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

Tcp通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。

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

4.每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信

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

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

TCP:

TCP编程的服务器端一般步骤是:

1、创建一个socket,用函数socket(); SOCKET SocketListen =socket(AF_INET,SOCK_STREAM, IPPROTO_TCP);

2、设置socket属性,用函数setsockopt(); * 可选

3、绑定IP地址、端口等信息到socket上,用函数bind(); SOCKET_ERROR =bind(SocketListen,(const sockaddr*)&addr,sizeof(addr))

4、开启监听,用函数listen(); SOCKET_ERROR == listen(SocketListen,2)

5、接收客户端上来的连接,用函数accept();

SOCKET SocketWaiter = accept(SocketListen, _Out_struct sockaddr *addr,_Inout_int *addrlen);

6、收发数据,用函数send()和recv(),或者read()和write();

7、关闭网络连接;closesocket(SocketListen);closesocket(SocketWaiter);

8、关闭监听;

SOCK_STREAM这种的特点是面向连接的,即每次收发数据之前必须通过connect建立连接,而SOCK_DGRAM这种是User Datagram Protocol协议的网络通讯,它是无连接的,不可靠的。
TCP编程的客户端一般步骤是:
  1、创建一个socket,用函数socket();
  2、设置socket属性,用函数setsockopt();* 可选  3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选  4、设置要连接的对方的IP地址和端口等属性;  5、连接服务器,用函数connect();
  6、收发数据,用函数send()和recv(),或者read()和write();  7、关闭网络连接;

int send(
_In_SOCKET s, //向哪个socket发送,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、创建一个socket,用函数socket();

2、设置socket属性,用函数setsockopt();* 可选

3、绑定IP地址、端口等信息到socket上,用函数bind();

4、循环接收数据,用函数recvfrom();

5、关闭网络连接;

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

1、创建一个socket,用函数socket();

2、设置socket属性,用函数setsockopt();* 可选

3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选

4、设置对方的IP地址和端口等属性;

5、发送数据,用函数sendto();

6、关闭网络连接;

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模型中的运输层中的协议。TCP提供可靠的通信传输,而UDP则常被用于让广播和细节控制交给应用的通信传输。

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字节

7、UDP首部,8个字节

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值