- 大神的UDP-Socket-Programming/ 非常有深度:
UDP协议是相对于TCP协议不是面向连接的,也是不可靠的,因此UDP套接字编程在思路上和TCP套接字编程很不一样。
普通的UDP套接字
sentto函数和recvfrom函数
- sentto函数和recvfrom函数比面向连接(稍后并不仅指TCP)的send和recv函数多了flag和表示送达和接收地址的SA。
- 容易看到这两个函数是适合UDP这样的无连接协议的。对于客户端来说,相当于将connect函数功能去掉,然后每次都显式传地址。对于服务端来说,它也不需要accept函数,每次recvfrom过来,它都可以取到这是从谁发过来的。甚至recvfrom的SA参数可以设为nullptr,这样表示我接受所有信息,不管是谁发的。
- 注意recvfrom传入的最后一个长度参数必须是已经初始化后的。否则UDP函数返回的地址和端口都会是0。
普通的UDP套接字存在的问题
异步错误
上面这样的设计看起来似乎很好,但考虑当服务端进程未开启,那从客户