欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    第5讲传送(3)数据报套接字编程课件.ppt

    • 资源ID:82425548       资源大小:3.01MB        全文页数:34页
    • 资源格式: PPT        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第5讲传送(3)数据报套接字编程课件.ppt

    第第5讲讲 数据报套接字编程数据报套接字编程WindowsWindows网络编程基础网络编程基础内容提要1、UDP:用户数据报协议2、数据报套接字编程模型3、基本函数4、程序举例5、UDP不可靠性问题6、UDP服务器的并发性1.UDP:1.UDP:用户数据报协议用户数据报协议1.1 使用TCP传输数据有什么缺点?服务器服务器三次握手三次握手建立连接建立连接客户客户四次交互四次交互关闭连接关闭连接数据传输数据传输缺点缺点1:传输开销大!:传输开销大!缺点缺点2:资源过耗!:资源过耗!服务器服务器客户客户 1.2 UDP:用户数据报协议多对多通信多对多通信不可靠服务不可靠服务缺乏流控制缺乏流控制报文模式报文模式1.3 数据报套接字编程的适用场合l在可靠的本地环境中运行;在可靠的本地环境中运行;l在不可靠的广域网环境中运行;在不可靠的广域网环境中运行;l广播或多播应用程序;广播或多播应用程序;l海量数据传输。海量数据传输。优点:灵活性优点:灵活性缺点:不可靠性缺点:不可靠性p 不推荐:不推荐:p 推荐:推荐:1.UDP:1.UDP:用户数据报协议用户数据报协议2.2.数据报套接字编程模型数据报套接字编程模型2.1 数据报套接字的通信过程创建套接字,指定使用创建套接字,指定使用UDPUDP(不可靠的传输服务)(不可靠的传输服务)进行通信;进行通信;指定本地和远端指定本地和远端IPIP地址和通信端口;地址和通信端口;关闭套接字;关闭套接字;进行数据传输;进行数据传输;UDP serverbind()socket()recvfrom()blocks until datagram received from clientprocess requestsendto()well-know portsocket()sendto()UDP clientrecvfrom()closesocket()data(request)data(reply)closesocket()2.2 数据报套接字的编程模型问题:server如何处理与多个client交互?2.3 服务器工作原理serverUDPclient2client1UDPUDPdatagramdatagramSocket receivebufferListening serverTCPServerchildServerchildclientclientTCPTCPconnectionconnectionconnectionconnectionconnectionconnectionTCP服务器服务器的工作原理的工作原理p 非连接模式非连接模式p 连接模式连接模式l sendto/sendl recvfrom/recvl connect(指明远程端点地址)(指明远程端点地址)l sendto(指明目标)(指明目标)l recvfrom(记录来源)(记录来源)2.4 数据报套接字使用模式2.4 数据报套接字使用模式使用连接模式的客户端编程使用连接模式的客户端编程connect()sendto()recvfrom()closesocket()socket()1.UDP:1.UDP:用户数据报协议用户数据报协议2.2.数据报套接字编程模型数据报套接字编程模型3.3.基本函数基本函数 SOCKET socket(int af,int type,int protocol)创建套接字创建套接字socket指定本地地址指定本地地址bindint bind(SOCKET s,const struct sockaddr*name,int namelen)本地端口号本地端口号本地本地IP地址地址SOCK_DGRAM3 基本函数int sendto(SOCKET s,const char FAR*buf,int len,int flags,const struct sockaddr FAR*to,int tolen)发送数据发送数据sendto接收数据接收数据recvfromint recvfrom(SOCKET s,char FAR*buf,int len,int flags,struct sockaddr FAR*from,int FAR*fromlen)目的目的IP目的端口号目的端口号INADDR_BROADCAST是否可通过是否可通过fromfrom参数控制只接收特定来源的报文?参数控制只接收特定来源的报文?否否int send(SOCKET s,const char FAR*buf,int len,int flags)int recv(SOCKET s,char FAR*buf,int len,int flags)来源来源IP来源端口号来源端口号p怎样指明目标?怎样指明目标?连接模式连接模式p 怎样获知来源?怎样获知来源?recvfrom(,struct sockaddr FAR*from,)非连接模式非连接模式connect(,struct sockaddr FAR*name,)sendto(,const struct sockaddr FAR*to,)连接模式连接模式非连接模式非连接模式connect(,struct sockaddr FAR*name,)问题问题1 1:如何向操作系统注册通信对方的地址?:如何向操作系统注册通信对方的地址?ABABbind()bind()socket()socket()connect()connect()UDP(协议,目标(协议,目标IPIP,目标端口,源,目标端口,源IPIP,源端口),源端口)IP头UDP头数据IP头UDP头数据IP头UDP头数据问题问题2 2:如何控制可接收的数据报类型?:如何控制可接收的数据报类型?应用进程应用进程接收缓存接收缓存发送(send vs.sendto)Send用于SOCK_STREAM:最常用用于SOCK_DGRAM:套接字地址通过连接函数connect获得Sendto用于SOCK_DGRAM:最常用用于SOCK_STREAM:to和tolen被忽略,此时,sendtosend问题问题3 3:如何选择合适的发送函数?:如何选择合适的发送函数?接收(recv vs.recvfrom)Recv:只接收已确定了连接来源的数据用于SOCK_STREAM:最常用用于SOCK_DGRAM:套接字地址通过连接函数connect获得Recvfrom用于SOCK_DGRAM:最常用用于SOCK_STREAM:from和fromlen被省略,此时,recvfrom=recv问题问题4 4:如何选择合适的接收函数?:如何选择合适的接收函数?1.UDP:1.UDP:用户数据报协议用户数据报协议2.2.数据报套接字编程模型数据报套接字编程模型3.3.基本函数基本函数4.4.程序举例程序举例使用UDP传输的服务器回射程序UDPclientUDP ECHOserverfgetsfputs“abc”“abc”“abc”1.UDP:1.UDP:用户数据报协议用户数据报协议2.2.数据报套接字编程模型数据报套接字编程模型3.3.基本函数基本函数5.UDP5.UDP的不可靠性问题的不可靠性问题4.4.程序举例程序举例clientserverother问题问题2 2:如果报文丢失,如何处理?:如果报文丢失,如何处理?问题问题1 1:如果出现了噪音数据,客户端应该怎样分辨?:如果出现了噪音数据,客户端应该怎样分辨?问题问题3 3:如果服务器没有启动,:如果服务器没有启动,客户端如何知道?客户端如何知道?接收缓冲区接收缓冲区5.5.UDP的不可靠性问题的不可靠性问题问题问题4 4:如果客户端发送的数据量太大,:如果客户端发送的数据量太大,服务器如何处理?服务器如何处理?解决:增加对数据源的判断解决:增加对数据源的判断问题问题1:1:如果出现了噪音数据,客户端应该怎样分辨?如果出现了噪音数据,客户端应该怎样分辨?/发送用户输入的数据发送用户输入的数据sendto(sockfd,sendline,strlen(sendline),0,pservaddr,servlen);/接收服务器发回的响应接收服务器发回的响应recvfrom(sockfd,recvline,MAXLINE,0,preplyaddr,&len);if(memcmp(pservaddr,preplyaddr,len)=0)输出结果;输出结果;/接收服务器发回的响应接收服务器发回的响应recvfrom(sockfd,recvline,MAXLINE,0,NULL,NULL);问题问题2 2:如果报文丢失,如何处理?:如果报文丢失,如何处理?解决:增加对解决:增加对recvfromrecvfrom的超时判断的超时判断/创建套接字创建套接字sockfd=socket(AF_INET,SOCK_DGRAM,0);/服务器地址赋值:服务器地址赋值:/设置接收超时设置接收超时nTimeOver=1000;/超时时限为超时时限为1000ms setsockopt(sockfd,SOL_SOCKET,SO_RCVTIMEO,(char*)&nTimeOver,sizeof(nTimeOver);while(fgets(sendline,MAXLINE,fp)!=NULL)发送请求;发送请求;接收应答;接收应答;n int setsockopt(SOCKET s,int level,int optname,const char*optval,int optlen);p 报文丢失情况报文丢失情况n 请求报文丢失请求报文丢失n 响应报文丢失响应报文丢失客户客户A服务器服务器B进一步解决:进一步解决:带确认的数据报服务带确认的数据报服务A请求请求B转转10,000美金到美金到A帐户帐户n 超时和重传:用于处理丢失的数据报超时和重传:用于处理丢失的数据报n 序列号:用于客户验证一个应答是否匹配相应的请求序列号:用于客户验证一个应答是否匹配相应的请求解决:用解决:用ICMPICMP端口不可达错误来判断服务器没有启动。端口不可达错误来判断服务器没有启动。问题问题3 3:如果服务器没有启动,客户端如何知道?:如果服务器没有启动,客户端如何知道?p 原理:当原理:当UDP不开放服务时返回端口不可达的不开放服务时返回端口不可达的ICMP报文。报文。p 问题:当套接字同时访问多个服务器时,如何判断哪一个问题:当套接字同时访问多个服务器时,如何判断哪一个服务器没有启动?服务器没有启动?p 解决:解决:p方法方法1:使用连接模式:使用连接模式p方法方法2:使用原始套接字接收:使用原始套接字接收ICMP报文报文现象:服务器计数收到的数据报个数小于现象:服务器计数收到的数据报个数小于客户端实际发送的数据报个数。客户端实际发送的数据报个数。解释:解释:UDP缺乏流量控制缺乏流量控制解决:解决:预先协商最大的请求和应答数据量预先协商最大的请求和应答数据量使用使用SO_RCVBUF设置接收缓存设置接收缓存问题问题4 4:如果客户端发送的数据量太大,:如果客户端发送的数据量太大,服务器如何服务器如何处理?处理?1.UDP:1.UDP:用户数据报协议用户数据报协议2.2.数据报套接字编程模型数据报套接字编程模型3.3.基本函数基本函数5.UDP5.UDP的不可靠性问题的不可靠性问题4.4.程序举例程序举例6.UDP6.UDP服务器的并发性服务器的并发性UDPUDP服务器的并发性服务器的并发性循环循环UDP服务器服务器服务器等待一个客户请求,读入这个请求,处理这个请服务器等待一个客户请求,读入这个请求,处理这个请求,送回其应答,接着等待下一个请求。求,送回其应答,接着等待下一个请求。并发并发UDP服务器服务器单次交互的客户请求单次交互的客户请求多次交互的客户请求多次交互的客户请求问题:何时需要并发问题:何时需要并发UDPUDP服务器?服务器?时机:当客户的请求处理耗时过长时时机:当客户的请求处理耗时过长时单次交互客户请求的并发处理单次交互客户请求的并发处理服务器客户端端口69子线程客户端子线程多次交互客户请求的并发处理多次交互客户请求的并发处理服务器如何区分来自客户的第一个请求和后续请求?服务器如何区分来自客户的第一个请求和后续请求?客户端如何获知服务器的后续响应?客户端如何获知服务器的后续响应?服务器在新的套接口上绑定临时端口服务器在新的套接口上绑定临时端口将服务器第一个应答中的源端口号作为后续目的端口将服务器第一个应答中的源端口号作为后续目的端口多次交互客户请求的并发处理多次交互客户请求的并发处理服务器客户端端口69子线程客户端子线程端口2132端口2133端口2132思考p 怎样处理怎样处理ICMPICMP协议消息?协议消息?

    注意事项

    本文(第5讲传送(3)数据报套接字编程课件.ppt)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开