UDP和TCP的区别:
UDP是无连接的、不可靠的数据协议报,而TCP是面向连接的,提供可靠的字节流。然而,有些情况更适合用UDP而不是TCP。有些流行的应用程序就是用UDP实现的:DNS(域名系统)、NFS(网络文件系统)和SNMP(简单网络管理协议)还有就是qq也是使用的UDP。
UDP和TCP通信模型类似,只是不需要连接,具体过程如下。
1、创建socket
创建一个UDP协议的套接字socket,此时socket的第二个参数不能传递SOCK_STREAM,而是传递SOCK_DGRAM,如创建一个基于IPv4地址族的UDP套接字
sockfd = socket(AF_INET,SOCK_DGRAM,0);
2、数据收发
recvfrom和sendto通常用于UDP协议通讯的I/O
函数原型如下:
#include<sys/socket.h>
ssize_t recvfrom(int sockfd,void* buff,size_t nbytes,int flags,struct sockaddr* from,socklen_t* addrlen);
ssize_t sendto(int sockfd,const void* buff,size_t nbytes,const struct sockaddr* to,socklen_t addrlen);
socket_t 相当于int ,这里用这个名字为的是提高代码的自说明性。
sockfd:标识一个已连接套接口的描述字。
buf:接收数据缓冲区。
len:缓冲区长度。
flags:调用操作方式。是以下一个或者多个标志的组合体,可通过or操作连在一起:
from:(可选)指针,指向装有源地址的缓冲区。
addrlen:(可选)指针,指向from缓冲区长度值。
服务器:
客户端:
运行结果: