UDP编程
编程思想:
在UDP网络编程中,主要通过UDP套接字(Socket)来实现数据的发送和接收。以下是UDP网络编程的主要步骤:
- 创建UDP套接字 :通过调用
socket
函数创建一个UDP套接字,指定协议类型为UDP。 - 绑定端口号 (服务器):对于服务器来说,需要调用
bind
函数将套接字和指定的端口号进行绑定,以便接收方能够监听该端口。 - 发送数据 :使用
sendto
函数将数据发送给目标地址和目标端口。在发送数据时,UDP会将数据封装成数据报,并附上源端口号和目标端口号等信息。 - 接收数据 :使用
recvfrom
函数从套接字中接收数据。recvfrom
函数不仅会接收数据,还会返回发送方的地址信息,这对于无连接协议来说是非常重要的。
所需知识:
bind:绑定服务器:TCP地址和端口号
receivefrom():阻塞等待客户端数据
sendto():指定服务器的IP地址和端口号,要发送的数据
用途:
无连接尽力传输,UDP:是不可靠传输
实时的音视频传输,DNS域名解析包
详细解析:
recvform函数:
recvfrom 函数用于接收UDP数据报。这个函数不仅接收数据,还提供了发送方的地址信息,这对于无连接协议(如UDP)来说是非常重要的,因为接收方需要知道数据是从哪里来的。
函数原型(在C语言中):
头文件:#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:指定接收操作的行为(如MSG_DONTWAIT标志用于非阻塞操作)。没有可用0
src_addr:指向sockaddr结构的指针,该结构在函数返回时包含发送方的地址信息。
addrlen:src_addr缓冲区的大小,且在函数返回时包含实际地址的长度。
sendto函数:
sendto 函数用于发送UDP数据报。与recvfrom类似,这个函数也需要指定目标地址和端口号,因为UDP是无连接的。
函数原型(在C语言中):
#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:指定发送操作的行为(如MSG_DONTWAIT标志用于非阻塞操作)。
dest_addr:指向sockaddr结构的指针,该结构包含目标地址信息。
addrlen:dest_addr缓冲区的大小。
实例:
服务器端:
客户端:
成功实现,还可进行多终端交互传输