【网络编程3】UDP编程
github仓库:https://github.com/brucewayne9064/LinuxCpp_server
UDP是无连接的不可靠的数据报协议,优点在于开销小(不用建立连接和撤销连接),速度快,缺点在于数据可能丢失
一、UDP套接字编程的基本步骤
1 | graph LR |
服务器:
- 创建socket
- bind地址
- 从套接字recvfrom客户端请求,得到客户端地址
- sendto信息给客户端
- 循环或者关闭
客户端:
- 创建socket
- sendto信息给服务器
- 从套接字recvfrom服务器应答
- 循环或者关闭
二、UDP套接字编程的相关函数
- sendto
- recvfrom
三、实战UDP套接字
四、UDP丢包以及无须问题
丢包:服务器的socket接收缓存满了,系统丢弃后来的包;或服务器处理收到的包的时间内没有接收新的包
- 在服务器单独开一个线程接收UDP包,放在单独缓冲区,用其他线程处理数据
- 减慢客户端发送速度,比如增加sleep时间
更好的解决办法:
- 模拟TCP
- 重发请求(ARQ)协议:连续ARQ,选择重发ARQ,滑动窗口
- 自己实现确认重传
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 BRUCE!
