Unix网络编程5-UDP编程.ppt

Unix网络编程5-UDP编程.ppt

ID:56532142

大小:323.50 KB

页数:33页

时间:2020-06-27

Unix网络编程5-UDP编程.ppt_第1页
Unix网络编程5-UDP编程.ppt_第2页
Unix网络编程5-UDP编程.ppt_第3页
Unix网络编程5-UDP编程.ppt_第4页
Unix网络编程5-UDP编程.ppt_第5页
资源描述:

《Unix网络编程5-UDP编程.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Unix网络编程第五讲UDPsocket编程UDPC/S编程UDPSocketsProgrammingCreatingUDPsockets.ClientServerSendingdata.Receivingdata.ConnectedMode.CreatingaUDPsocketintsocket(intfamily,inttype,intproto);intsock;sock=socket(PF_INET,SOCK_DGRAM,0);if(sock<0){/*ERROR*/}绑定到有名地址intmysock;structso

2、ckaddr_inmyaddr;mysock=socket(PF_INET,SOCK_DGRAM,0);memset(&myaddr,0,sizeof(myaddr));myaddr.sin_family=AF_INET;myaddr.sin_port=htons(1234);myaddr.sin_addr.s_addr=htonl(INADDR_ANY);bind(mysock,&myaddr,sizeof(myaddr));通常只有服务器需要绑定地址发送UDP数据报文sockfd-UDPsocketbuff-数据缓冲区地址

3、(nbytes-长度)to-指向sockaddr结构的目标地址.addrlen-to指向的sockaddr结构的长度返回值-实际发送数据数目,-1表示出错ssize_tsendto(intsockfd,void*buff,size_tnbytes,intflags,conststructsockaddr*to,socklen_taddrlen);sendto()你可以发送0字节数据!可能的错误有:EBADF,ENOTSOCK:错误的socket描述符EFAULT:错误的缓冲地址EMSGSIZE:消息长度过大ENOBUFS:系统

4、缓冲区满sendto()sendto()的返回值指示的是多少数据被OS接受并且以一个数据报文发送–并非多少数据已经发送到目的地.sendto()无法指示数据没有到达目的地!!!接收UDP数据报文sockfd-UDPsocketbuff-缓冲区地址(长度nbytes)from-sockaddr的地址.返回接收到的字节长度,出错返回-1.ssize_trecvfrom(intsockfd,void*buff,size_tnbytes,intflags,structsockaddr*from,socklen_t*fromaddrle

5、n);recvfrom()如果缓冲区不够大,超过缓冲区的“多余”的数据将丢失...你可能接收到0字节数据!发送者的地址填入到sockaddr结构的from变量中.fromaddrlen需要在调用前添好合适的值.如果from和fromaddrlen都是NULL,我们将难以知道数据是从哪里发送过来的.recvfrom()除了和sendto一样的错误外,还有:EINTR:系统调用被信号中断.recvfrom正常情况下阻塞等待,一直到一个数据报文到来为止.典型的UDP客户程序创建UDPsocket.创建sockaddr填充好服务器的地

6、址.调用sendto(),发送请求给服务器.没有必要调用bind()!如果要接收数据,调用recvfrom().典型的UDP服务器程序创建UDPsocket并bind到有名地址.调用recvfrom()得到客户的请求,并且应当注意客户的地址.处理请求并调用sendto()发送应答.UDPEchoServerintmysock;structsockaddr_inmyaddr,cliaddr;charbuf[MAXLEN];socklen_tclilen;intmsglen;mysock=socket(PF_INET,SOCK_D

7、GRAM,0);memset(&myaddr,0,sizeof(myaddr));myaddr.sin_family=AF_INET;myaddr.sin_port=htons(S_PORT);myaddr.sin_addr.s_addr=htonl(INADDR_ANY);bind(mysock,&myaddr,sizeof(myaddr));while(1){len=sizeof(cliaddr);msglen=recvfrom(mysock,buf,MAXLEN,0,&cliaddr,&clilen);sendto(my

8、sock,buf,msglen,0,cliaddr,clilen);}NEEDTOCHECKFORERRORS!!!1#include"unp.h"2intmain(intargc,char**argv)4{5intsockfd;6structsockaddr_inserva

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。