资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,UDP,套接字编程,UDP,套接字编程,实现,UDP,套接字基本步骤分为服务器端和客户端两部分:,服务器端,建立,UDP,套接字;,绑定套接字到特定地址;,等待并接收客户端信息;,处理客户端请求;,发送信息回客户端;,关闭套接字;,UDP,套接字编程(,Cont.,),客户端步骤,建立,UDP,套接字;,发送信息给服务器;,接收来自服务器的信息;,关闭套接字,UDP,套接字编程(,Cont.,),UDP,数据传输函数,sendto,#include,#include,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,#include,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,是“,值结果,”参数。,内核,长度,套,接口地址结构,用户进程,结果,值,当函数被调用时,结构大小是一值,当函数返回时,结构大小又是一个结果,这种参数类型叫值,-,结果参数。参数是一个整型指针。,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,),值,-,结果参数说明,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 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,套接字例程,本例程分为服务器和客户两部分,主要完成如下功能:,服务器循环接收客户发来的消息,并显示客户,IP,地址和相应消息;,如果服务器收到”,quit“,,,则退出循环,并关闭套接字;,客户向服务器发送消息,并接收服务器响应,显示该消息,并关闭套接字。,
展开阅读全文