UDP应用程序客户不与服务器建立连接,而是只管使用sendto函数给服务器发送数据报,其中必须指定目的地的地址作为参数。
下图给出典型的UDP客户/服务器程序的函数调用。
recvfrom和sendto函数
这两个函数类似于标准的read和write函数,不过需要3个额外的参数
#include <sys/socket.h> ssize_t recvfrom(int sockfd, void *buff, size_t nbytes, int flags,struct sockaddr *src_addr, socklen_t *addrlen); ssize_t sendto(int sockfd, const void *buff, size_t nbytes, int flags,const struct sockaddr *to, socklen_t addrlen); //均返回:若成功则为读或写的字节数,若出错则为-1
UDP回射服务器程序
main函数
1 #include "unp.h" 2 3 int 4 main(int argc, char **argv) 5 { 6 int sockfd; 7 struct sockaddr_in servaddr, cliaddr; 8 9 sockfd = Socket(AF_INET, SOCK_DGRAM, 0); 10 11 bzero(&servaddr, sizeof(servaddr)); 12 servaddr.sin_family = AF_INET; 13 servaddr.sin_addr.s_addr = htonl(INADDR_ANY); 14 servaddr.sin_port = htons(SERV_PORT); 15 16 Bind(sockfd, (SA *) &servaddr, sizeof(servaddr)); 17 18 dg_echo(sockfd, (SA *) &cliaddr, sizeof(cliaddr)); 19 }