[db:标题]
摘要:UDP通信 6-1 简介 UDP通信是面向无链接的,不稳定,不可靠,不安全的一种通信方式。TCP在通信前发送方会向接收方进行三次握手链接,然后确认双方链接后才会进行数据传输,最后四次挥手保证链接关闭。而UDP不会三次握手四次挥手,它会直
UDP通信
6-1 简介
UDP通信是面向无链接的,不稳定,不可靠,不安全的一种通信方式。TCP在通信前发送方会向接收方进行三次握手链接,然后确认双方链接后才会进行数据传输,最后四次挥手保证链接关闭。而UDP不会三次握手四次挥手,它会直接向发送方发送数据,无论接收方是否会收到,所以UDP更适合在稳定的网络环境中使用。
6-2 UDP通信相关函数
6-2-1 recvfrom函数
头文件:#include <sys/socket.h>
函数原型:ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen);
函数功能:接收消息。如果没有数据到来函数会一直阻塞,直到有数据到来或者发送错误。
函数参数:
sockfd:套接字。
buf:用于存放接收消息的缓冲区。
len:缓冲区的长度。
flags:标志位,一般填0。
src_addr:返回发送方的地址信息,包括ip和端口号
addrlen:表示scr_addr指向的缓冲区大小,作为输出参数表示实际发送方地址的长度。
函数返回值:
成功:返回接收的数据的字节数量。
失败:返回-1。
发送错误:返回-1
6-2-2 sendto函数
头文件:#include <sys/socket.h>
函数原型:ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);
函数功能:发送数据。
函数参数:
sockfd:套接字。
buf:指向要发送的数据的缓冲区。
len:要发送的数据的长度。
flags:传输标志,用于控制发送过程的行为,通常设置为0。
dest_addr:指向目标地址的指针,其中包含目标ip和端口号信息。
addrlen:目标地址结构体的长度。
函数返回值:
成功:返回实际发送的字节数。
错误:返回-1。
6-3 使用UDP通信的服务端编写步骤
第一步:创建一个套接字,但是socket函数的第二个参数要填 SOCK_DGRAM来将协议改为UDP
第二步:将刚才创建的套接字与本地地址绑定。
第三步:进入一个循环然后使用recvfrom函数来接收数据,接收到数据可以处理数据,然后使用sendto将处理好的数据回应给客户端。
第四步:重复第三步,如果服务端需要关闭了记得关闭掉第一步创建的套接字描述符。
6-4 使用UDP通信的客户端编写步骤
第一步:创建一个套接字,但是socket函数的第二个参数要填 SOCK_DGRAM来将协议改为UDP
第二步:可以根据实际开发的需要,进入一个循环体持续收发数据或者是只收发一次数据。收发数据的函数就是上面的那两个。
第三步:重复第二步,如果不需要发送数据了记得关闭第一步创建的套接字。
