《第04章 UDP套接字编程基础》由会员分享,可在线阅读,更多相关《第04章 UDP套接字编程基础(12页珍藏版)》请在金锄头文库上搜索。
1、第第4章章 UDP套接字编程UDP套接字编程n实现UDP套接字基本步骤分为服务器端和客户端两部分:n服务器端建立UDP套接字;绑定套接字到特定地址;等待并接收客户端信息;处理客户端请求;发送信息回客户端;关闭套接字;UDP套接字编程n客户端步骤建立UDP套接字;发送信息给服务器;接收来自服务器的信息;关闭套接字UDP套接字编程UDP数据传输函数sendto#include #include ssize_t sendto(int sockfd, const void *msg, size_t len, int flags, const struct sockaddr *to, int tolen
2、 ); 返回:大于0成功发送数据长度;-1出错;nUDP套接字使用无连接协议,因此必须使用sendto函数,指明目的地址;nflags是传输控制标志,其值定义如下:n0:常规操作,如同write()函数;nMSG_OOB:发送带外数据;nMSG_DONTROUTE:忽略底层路由协议,直接发送。UDP数据传输函数sendtoUDP数据传输函数recvfrom#include #include ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *from, int *fromlen);返回:
3、大于0成功接收数据长度; -1出错;UDP数据传输函数recvfromnUDP套接字使用无连接协议,因此必须使用recvfrom函数,指明源地址;nflags是传输控制标志,其值定义如下:n0:常规操作,如同read()函数;nMSG_PEEK:只察看数据而不读出数据;nMSG_OOB:忽略常规数据,而只读取带外数据;nfrom 和 fromlen 是“值结果”参数。内核长度套接口地址结构用户进程结果值 当函数被调用时,结构大小是一值,当函数返回时,结构大小又是一个结果,这种参数类型叫值-结果参数。参数是一个整型指针。bind(int sockfd, const struct sockaddr
4、 *addr, socklen_len len)recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *from, int *fromlen)值值-结果参数说明结果参数说明UDP服务器模板#include #include #inlcude int main(void)int socketfd;if (sockfd = socket(AF_INET, SOCK_DGRAM, 0) = -1) perror(“Create socket failed.”);exit(1);/* Bind socket to
5、address */ loop /* receive and process data from client */ /* send resuts to client */close(sockfd); UDP客户模板#include #include #inlcude int main(void)int sockfd;if (sockfd = socket(AF_INET, SOCK_DGRAM, 0) = -1) perror(“Create socket failed.”);exit(1);/* send data to the server */* receive data from the server */close(sockfd);UDP套接字演示例程n本例程分为服务器和客户两部分,主要完成如下功能:n服务器循环接收客户发来的消息,并显示客户IP地址和相应消息;n如果服务器收到”quit“,则退出循环,并关闭套接字;n客户向服务器发送消息,并接收服务器响应,显示该消息,并关闭套接字。