欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    网络软件设计15-拆除连接.ppt

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

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

    网络软件设计15-拆除连接.ppt

    网络软件设计,拆除连接,制作主讲,段景山,2,连接的拆除,传完了数据就该结束了But,To be,or not to,its a problem结束,还是不结束,这是个问题不恰当的结束将导致通信的失败失败的通信是前功尽弃的例什么原因可能导致通信失败?当自己没有数据时,就结束错误根源:以自己的状态来评判对方的状态当自己没有数据时不结束容易出现死锁,P88/P105/P112/P114,1、客户发出请求后等待服务器的数据2、服务器发送完数据后等待客户机新的请求3、如果客户机不知道服务器有多少数据时,死锁!4、同理,若服务器不知道客户机有没有新请求时,死锁!,3,拆除连接,所以,什么叫“通信结束”?双方都了解对方没有新的数据时怎样“结束”连接?核心问题怎样了解对方没有新数据?怎样被对方了解自己没有新数据?,4,拆除连接,连接关闭的相关问题有没有多种选择?如关闭双向连接中的一向shutdown(s,SD_SEND);shutdown(s,SD_RECV);对待发/待收数据的处理?如一方强行断链系统发送完待发数据系统丢弃所有的数据要不要释放资源?可否继续利用套接字建立新的连接新的连接新的套接字,5,拆除连接,“通信结束”的方法讨论联想日常生活中,挂电话的情况1、两个人商量好,然后各自挂机过于依赖高层协议,有碍服务器程序的通用性2、一方挂机,另一方听到忙音后挂机过于粗暴3、对于双向通信,A方通知“我没有新数据”了,B方收到通知后,发完自己的数据后就可以挂机了。可以让双方的数据都得到完整交换雅致关闭,设计,6,拆除连接,分别设计各种方式的算法高层协商粗暴关闭雅致关闭,7,拆除连接,1、两个人商量好,然后各自挂机,A,B,(want to cease the conversation),data=“I want to stop”;,send(data);,recv(data);,recv(data);,if(data=“I want to stop”),if(state=AGREE),send(“I agree”);,if(data=“I agree”),closesocket(s);,goto end;,else,continue conversation,goto back;,closesocket(s);,goto end;,else,send(“I have more words”),continue conversation,8,拆除连接,2、一方挂机,另一方听到忙音后挂机,A,B,(want to cease the conversation),closesocket(s);,send(data);,if(recv(data)=0),closesocket(s);,goto end;,else,continue conversation;,注意:want to cease the conversation往往是由于自己没有新数据要发。但,不意味着知道对方没有新的数据送来,此时关闭连接是不妥当的,while(recv(data)0)continue conversation;closesocket(s);,9,3、对于双向通信,A方通知“我没有新数据”了,B方收到通知在发完数据后就可以挂机了。,拆除连接,A,B,(want to cease the conversation),if(state=NO_DATA_SEND),shutdown(SD_SEND);,if(recv(data)=0),state=CLOSE_WAIT;,send(data);,if(state=NO_DATA_SEND),closesocket(s);,goto end;,else,goto back;,while(recv(data)0),process data;,closesocket(s);,雅致关闭,思考:在process data中如果需要发出数据怎么办?,10,雅致关闭,“雅致”关闭是计算机通信系统的特色“雅致”关闭可以使双方的数据都能完整接收/发送雅致关闭有多种方式(算法)可以实现注意雅致关闭与高层协商的区别!高层协商的缺点在于协商的可靠性不高雅致关闭的优点在于通过系统来通报希望结束的信息,提高了通用性和可靠性,降低了实现难度用户通知系统(“我没有数据了”)shutdown(SD_SEND);系统通知用户(“对方没有数据了”)recv()函数的返回值为0!,11,雅致关闭的实现,方法一、利用shutdown标准做法算法思路,A,B,无需要发送的数据后,shutdown(SD_SEND);,可以接收对方的数据直到对方关闭套接字,closesocket(),while(recv(data)0)process(data);,if(recv(data)=0),send(data),closesocket(),雅致关闭并不对服务器和客户机程序有所区分,12,雅致关闭的实现,方法一、利用shutdown标准做法算法,if(状态为发送完毕),shutdown(SD_SEND);,while(recv()0),processdata();,closesocket();,else,send();,if(recv()0),processdata();,else,shutdown(SD_RECV);,13,socket函数与时序,SYN,SYN+ACK,ACK,FIN,FIN,ACK,listen(),connect(),connect()返回,accept(),send(),send(),recv(),recv(),shutdown(SEND),closesocket(),recv()的返回,recv(),recv()的返回值=0,ACK,recv(),recv()的返回值=0,closesocket(),14,雅致关闭,方法二、利用closesocket()不限时逗留设置套接字状态为SO_DONTLINGER SO_DONTLINGER为套接字默认状态调用closesocket();系统并没有将套接字立即关闭,而是在发完套接口结构中待发送队列上的所有数据后才关闭,struct socketshort so_type;short so_state;struct sockbuf so_rcv,so_snd;,15,雅致关闭,方法三、利用closesocket()限时逗留设置套接字状态为SO_LINGER,并设置逗留的时间超时时间为非零值调用closesocket();系统并没有将套接字立即关闭,而是在发完套接口结构中待发送队列上的所有数据后,或超时后才关闭若超时还有数据没有发完,只有丢弃数据,完成关闭动作,16,立即关闭,丢弃所有待发送/接收数据的方法设置套接字为SO_LINGER,并设置逗留时间为0调用closesocket(),socket会立即关闭,资源立即释放注:TCP层实体此时配合发送的是RST报文,struct linger immediately;immediately.l_onoff=1;immediately.l_linger=0;val=setsockopt(sock,SOL_SOCKET,SO_LINGER,(char*),17,socket,TCP/UDP,应用进程,socket结构里的队列,so_q0,so_q,so_rcv,so_snd,数据到达,送出数据,shutdown(),closesocket(),RECV:关闭so_rcv队列、释放数据,SEND:关闭so_snd队列 发完so_snd队列上现有数据,DONTLINGER:关闭so_rcv队列 发完so_snd上所有数据,立即关闭:关闭并释放so_rcv队列 关闭并释放so_snd队列,18,拆除连接小结,小结shutdown和closesocket都可以实现关闭连接,但有不同。shutdown的雅致关闭可以保证高层数据的完整交换closesocket的“雅致关闭”只能保证TCP实体间的数据完整性shutdown不释放套接字资源注:是否可继续利用套接字,请大家测试closesocket释放套接字资源结合队列理解雅致关闭的实现方法,可以帮助我们丰富在模块间设计接口队列的经验,

    注意事项

    本文(网络软件设计15-拆除连接.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

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




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开