与TCP编程相比较,UDP缺少了connect()、listen()及accept()函数,这是由于UDP协议无连接的特性,不用维护TCP的连接、断开等状态。
UDP编程框图
API函数
socket(),bind()和TCP方式一样
recvfrom/recv
原型:ssize_t recv(int s, void *buf, size_t len, int flags);
ssize_t recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen);
第一个参数s表示正在监听的套接字文件描述符,由socke()生成。第二个参数buf表示接收数据缓冲区,接收的数据将放在这个指针指向的内存空间。第三个参数len表示接收数据缓冲区的大小,系统根据这个值来确保接收缓冲区的安全,防止溢出。第四个参数from是指向本地的数据结构socketaddr_in的指针,接收数据时发送方的地址信息放在这个结构中。第五个参数fromlen表示第四个参数所指内容的长度。
注:from和fromlen均为指针,注意进行取地址运算。
sendto/send
原型:ssize_t send(int s, const void *buf, size_t len, int flags);
ssize_t recvfrom(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen);
第一个参数s表示正在监听的套接字文件描述符,由socke()生成。第二个参数buf表示发送数据缓冲区,发送的数据将放在这个指针指向的内存空间。第三个参数len表示发送数据缓冲区的大小。第四个参数from是指向目的主机的数据结构socketaddr_in的指针,接收数据的主机地址信息放在这个结构中。第五个参数fromlen表示第四个参数所指内容的长度。