12.udp
- **1. UDP特性**
- **2. UDP编程框架(C/S模式)**
- **3. UDP发送接收函数**
- **4. UDP编程练习**
1. UDP特性
- 连接特性:无链接,通信前无需像TCP那样建立连接。
- 可靠性:不可靠,不保证数据按序到达、不保证数据无丢失或重复。
- 数据传输:适合传输大数据,但实际传输受网络MTU等因素限制。
2. UDP编程框架(C/S模式)
- 服务器端流程:
- 创建套接字:调用
socket()
函数,参数为(PF_INET,SOCK_DGRAM,0)
。 - 绑定地址:使用
bind()
函数,绑定服务器地址和端口,此步骤为必选。 - 接收数据:通过
recvfrom()
函数接收客户端发送的数据。 - 关闭套接字:通信结束后,调用
close()
函数关闭套接字。
- 创建套接字:调用
- 客户端流程:
- 创建套接字:同样调用
socket(PF_INET,SOCK_DGRAM,0)
。 - 绑定地址:
bind()
函数为可选操作,若需要固定客户端端口则绑定。 - 发送数据:利用
sendto()
函数向服务器发送数据。 - 关闭套接字:完成通信后,用
close()
关闭套接字。
- 创建套接字:同样调用
3. UDP发送接收函数
- sendto函数:
- 功能:用于UDP协议中向对方发送数据。
- 参数:
sockfd
:本地的套接字id。buf
:本地的数据存储,一般是要发送的数据。len
:要发送的数据长度。flags
:发送数据方式,0表示阻塞发送。dest_addr
:必选,表示要发送到的目标主机信息结构体。addrlen
:目标地址长度。
- 返回值:成功返回发送的数据长度,失败返回 -1。
- recvfrom函数:
- 功能:用于UDP协议中获取对方发送的数据。
- 参数:
sockfd
:本地的套接字id。buf
:要存储数据的内存区,一般是数组或者动态内存。len
:要获取的数据长度,一般是buf
的大小。flags
:获取方式,0表示阻塞。src_addr
:可选,表示对方的地址信息结构体,如果为NULL
,表示不关心对方地址。addrlen
:对方地址信息结构体大小,如果src_addr
是NULL
,则该值也为NULL
。
- 返回值:成功返回接收到的数据长度,失败返回 -1。
4. UDP编程练习
- 验证UDP无链接性质的测试程序:编写程序,在未建立类似TCP连接的情况下,实现UDP数据的发送和接收,验证UDP无需预先连接即可通信的特性。
- 基于UDP的点对点聊天程序:利用UDP的发送和接收函数,实现两个端点之间的实时消息交互功能。
- 基于UDP的聊天室程序:
- 注册过程:每个客户端在服务器端进行注册,服务器记录客户端信息。
- 消息转发:服务器接收任意客户端发送的消息,并将其转发给所有在线客户端。
- 下线通知:当任意客户端下线时,服务器负责通知其他在线用户主机。