UDP编程
UDP编程流程:

UDP编程除soket、listen、bind、connect、send、recv等特定网络相关函数外,收发数据采用了新的收发函数在send和recv的基础上进行扩充。
- UDP数据新的函数:
1 |
|
MSG_PEEK方式读数据:常用在对一包数据进行协议长度检查,看是否已经接收到一包完整的数据,下次再调用recv()读数据还是会读到和上次一样的数据,因为上次以MSG_PEEK方式读数据,文件描述符(流)的偏移量并没有改变。
- UDP网络编程模型:循环模式

服务端编程:
1 |
|
客户端编程:
1 |
|
运行结果:

UDP编程和TCP编程的区别:
1.UDP不是面向连接的,所以服务器不需要为每个连接专门创建一个线程收发数据。
2.UDP没有connect、listen函数,用来建立连接。
3.UDP发送数据必须携带对方的ip和端口信息,告诉内核该包数据发送的具体位置信息。
4.客户端关闭了,服务器不用做任何处理,而TCP需要关闭为这个客户端创建的进程或线程。
5.UDP和TCP在传输层是相互独立的,所以端口号也是独立的,一台设备一个端口可以同时被绑定UDP和TCP服务端。
6.UDP发送数据不会管对方是否收到,数据给到内核,内核通过传输层–>网络层–>链路层–>网卡–>n….个路由器–>服务端机器的硬件。
7.UDP客户端和服务端的区别不是很大,相比UDP客户端服务端唯一多了一步绑定本机的ip和端口,从而能过让客户端通过这个ip和端口号找到自己。如果要实现双向通信就要求两个设备都要绑定各自的ip和端口号,互为服务器和客户端。
8.UDP不用等待确认,没有实际的发送缓冲区,发送的时候直接往内核送数据,所以UDP协议中不存在发送缓冲区满的情况,在UDP套接字上执行的写操作永远都不会阻塞。



















