Linux/UNIX网络编程 甘刚 第04章 基本UDP套接口编程新.ppt
文本预览下载声明
UDP套接字编程 UDP套接字编程 实现UDP套接字基本步骤分为服务器端和客户端两部分: 服务器端 建立UDP套接字; 绑定套接字到特定地址; 等待并接收客户端信息; 处理客户端请求; 发送信息回客户端; 关闭套接字; UDP套接字编程(Cont.) 客户端步骤 建立UDP套接字; 发送信息给服务器; 接收来自服务器的信息; 关闭套接字 UDP套接字编程(Cont.) UDP数据传输函数-sendto #include sys/types.h #include sys/socket.h ssize_t sendto(int sockfd, const void *msg, size_t len, int flags, const struct sockaddr *to, int tolen); 返回:大于0-成功发送数据长度;-1-出错; UDP套接字使用无连接协议,因此必须使用sendto函数,指明目的地址; flags是传输控制标志,其值定义如下: 0:常规操作,如同write()函数; MSG_OOB:发送带外数据; MSG_DONTROUTE:忽略底层路由协议,直接发送。 UDP数据传输函数-recvfrom #include sys/types.h #include sys/socket.h ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *from, int *fromlen); 返回:大于0-成功接收数据长度;-1-出错; UDP套接字使用无连接协议,因此必须使用recvfrom函数,指明源地址; flags是传输控制标志,其值定义如下: 0:常规操作,如同read()函数; MSG_PEEK:只察看数据而不读出数据; MSG_OOB:忽略常规数据,而只读取带外数据; from 和 fromlen 是“值-结果”参数。 UDP服务器模板 #include sys/types.h #include sys/socket.h #inlcude netinet/in.h int main(void) { int socketfd; if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { perror(“Create socket failed.”); exit(1); } /* Bind socket to address */ …… loop { /* receive and process data from client */ …… /* send resuts to client */ } close(sockfd); } UDP客户模板 #include sys/types.h #include sys/socket.h #inlcude netinet/in.h 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套接字例程 本例程分为服务器和客户两部分,主要完成如下功能: 服务器循环接收客户发来的消息,并显示客户IP地址和相应消息; 如果服务器收到”quit“,则退出循环,并关闭套接字; 客户向服务器发送消息,并接收服务器响应,显示该消息,并关闭套接字。 * * 内核 长度 套接口地址结构 用户进程 结果 值 当函数被调用时,结构大小是一值,当函数返回时,结构大小又是一个结果,这种参数类型叫值-结果参数。参数是一个整型指针。 bind(int sockfd, const struct sockaddr *addr, socklen_len len) recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *from, int *fromlen) 值-结果参数说明 在线教务辅导网: 更多课程配套课件资源请访问在线教务辅导网
显示全部