UNIX网络编程---基本UDP套接字编程
一、概述
UDP是无连接的不可靠的数据报协议,不同于TCP提供的面向连接的可靠字节流。使用UDP编写的一些常见的应用程序有:DNS、NFS和SNMP(简单网络管理协议)。
客户不于服务器建立连接,而是只管使用sendto给服务器发送数据报,其中必须制定目的地的地址作为参数。类似地,服务器不接受来自客户的连接,而是只管调用recvfrom函数,等待来自某个客户的数据到达。Recvfrom将与所接受的数据报一道返回客户的协议地址iyici服务器可以把响应发送刚给正确的客户。
二、recvfrom和sendto函数
#include<sys/socket.h>
Ssize_t recvfrom(int sockfd,void *buff,sieze_t nbytes,intflags,struct sockaddr *from,socklen_t *addrlen);
Ssize_t sendto(int sockfd,const void*buff,size_t nbytes,int flags,const struct sockaddr *to,socklen_t addrlen);
前三个参数和read、write函数的三个参数:描述符、指向读入或写出缓冲区的指针和读写字节数。
Recvfrom的最后两个参数类似于accept的最后两个参数:返回时其中套接字地址结构的内容告诉我们是谁发送了数据报(UDP情况下)或者是谁发起了链接(TCP情况下)。Sendto的最后两个参数类似于conect的最后两个参数:调用时其中套接字地址结构被我们填入数据报将发送(UDP情况下)或与之建立连接(TCP情况下)的协议地址。
写一个长度为0的数据报是可行的。
如果recvfrom的from参数是一个空指针,那么相应的长度参数也必须是一个空指针,表示我们并不关心数据发送者的协议地址。
Recvfrom和sendto都可以用于TCP,尽管通常没有理由这样做。
一般来说,大多数TCP服务器是并发的,而大多数UDP服务器是迭代的。