type
status
date
slug
summary
tags
category
icon
password
相较 TCP 编程而言,UDP 编程要简单许多。其基本流程如下图所示:
notion image
其中大多数函数我们都讲过了,只有sendto()recvfrom()需要学习下。最后,我们将构建一个 daytime 服务器,来演示这个基本流程。

1. sendto()

sendto()函数,一般是用来给SOCK_DGRAM类型的套接字发送数据的。
sendto()send()函数非常类似,最后两个参数dest_addraddrlen是用来指定接收方地址的。

2. recvfrom()

recvfrom()函数,一般是用来给SOCK_DGRAM类型的套接字接收数据的。
recvfrom()recv()函数非常类似,最后两个参数src_addraddrlen是用来接收发送端地址的。

3. 经典案例——daytime 服务器

准备好了吗?接下来,我们要构建一个 daytime 服务器!它的流程是这样的:
  1. 服务器端绑定一个众所周知的端口。
  1. 客户端给服务器端发送一个正文长度为 0 的消息。
  1. 服务器端收到消息后,会把当前时间返回给客户端。
  1. 客户端将收到的时间输出到标准输出。

总结归纳

这一章,我们学习了 UDP 编程。
  • UDP 是一种数据报协议,非常类似我们人类社会邮寄明信片,它不需要建立连接。
  • UDP 是没有上下文的,也就是说数据报与数据报之间是独立的,就像明信片与明信片之间是独立的一样。而 TCP 是有上下文的,段与段之间是有先后顺序关系的。
  • UDP 使用recvfrom()sendto()时,需要两个额外的地址参数,用来接收或指定远端的地址。

参考文章

  • UNIX Network Programming, Volume 1: The Sockets Networking API, 3rd Edition
 
💡
欢迎您在底部评论区留言,我们一起交流学习~
高性能网络编程(6)——I/O 多路复用之 select高性能网络编程(4)——TCP编程(二)