网络软件设计15——拆除连接

上传人:hs****ma 文档编号:588272918 上传时间:2024-09-07 格式:PPT 页数:18 大小:1,006.52KB
返回 下载 相关 举报
网络软件设计15——拆除连接_第1页
第1页 / 共18页
网络软件设计15——拆除连接_第2页
第2页 / 共18页
网络软件设计15——拆除连接_第3页
第3页 / 共18页
网络软件设计15——拆除连接_第4页
第4页 / 共18页
网络软件设计15——拆除连接_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《网络软件设计15——拆除连接》由会员分享,可在线阅读,更多相关《网络软件设计15——拆除连接(18页珍藏版)》请在金锄头文库上搜索。

1、网络软件设计网络软件设计拆除连接拆除连接制作主讲段景山段景山段景山2连接的拆除连接的拆除n n传传完了数据就完了数据就完了数据就完了数据就该结该结束了束了束了束了l lButBut,To beTo be, or not toor not to,its a problemits a probleml l结结束,束,束,束,还还是不是不是不是不结结束,束,束,束,这这是个是个是个是个问题问题l l不恰当的不恰当的不恰当的不恰当的结结束将束将束将束将导导致通信的失致通信的失致通信的失致通信的失败败uu失失失失败败的通信是前功尽弃的的通信是前功尽弃的的通信是前功尽弃的的通信是前功尽弃的uu例例例例l

2、l什么原因可能什么原因可能什么原因可能什么原因可能导导致通信失致通信失致通信失致通信失败败?uu当自己没有数据当自己没有数据当自己没有数据当自己没有数据时时,就,就,就,就结结束束束束 错误错误根源:以自己的状根源:以自己的状根源:以自己的状根源:以自己的状态态来来来来评评判判判判对对方的状方的状方的状方的状态态uu当自己没有数据当自己没有数据当自己没有数据当自己没有数据时时不不不不结结束束束束 容易出容易出容易出容易出现现死死死死锁锁P88/P105/P112/P114P88/P105/P112/P1141 1、客户发出请求、客户发出请求、客户发出请求、客户发出请求后等待服务器的数后等待服务

3、器的数后等待服务器的数后等待服务器的数据据据据2 2、服务器发送完、服务器发送完、服务器发送完、服务器发送完数据后等待客户机数据后等待客户机数据后等待客户机数据后等待客户机新的请求新的请求新的请求新的请求3 3、如果客户机不、如果客户机不、如果客户机不、如果客户机不知道服务器有多少知道服务器有多少知道服务器有多少知道服务器有多少数据时,数据时,数据时,数据时,死锁!死锁!死锁!死锁!4 4、同理,若服务、同理,若服务、同理,若服务、同理,若服务器不知道客户机有器不知道客户机有器不知道客户机有器不知道客户机有没有新请求时,没有新请求时,没有新请求时,没有新请求时,死死死死锁!锁!锁!锁!段景山段

4、景山3拆除连接拆除连接n n所以,什么叫所以,什么叫“通信通信结束束”?l l双方都双方都双方都双方都了解了解了解了解对对方没有新的数据方没有新的数据方没有新的数据方没有新的数据时时n n怎怎样“结束束”连接?接?l l核心核心核心核心问题问题uu怎怎怎怎样样了解了解了解了解对对方没有新数据?方没有新数据?方没有新数据?方没有新数据?uu怎怎怎怎样样被被被被对对方了解自己没有新数据?方了解自己没有新数据?方了解自己没有新数据?方了解自己没有新数据?段景山段景山4拆除连接拆除连接l l连连接关接关接关接关闭闭的相关的相关的相关的相关问题问题uu有没有多种有没有多种有没有多种有没有多种选择选择?如

5、关?如关?如关?如关闭闭双向双向双向双向连连接中的一向接中的一向接中的一向接中的一向 shutdown(s,SD_SEND);shutdown(s,SD_SEND); shutdown(s,SD_RECV);shutdown(s,SD_RECV);uu对对待待待待发发/ /待收数据的待收数据的待收数据的待收数据的处处理?如一方理?如一方理?如一方理?如一方强强行断行断行断行断链链 系系系系统发统发送完待送完待送完待送完待发发数据数据数据数据 系系系系统丢统丢弃所有的数据弃所有的数据弃所有的数据弃所有的数据uu要不要要不要要不要要不要释释放放放放资资源?源?源?源? 可否可否可否可否继续继续利用

6、套接字建立新的利用套接字建立新的利用套接字建立新的利用套接字建立新的连连接接接接 新的新的新的新的连连接新的套接字接新的套接字接新的套接字接新的套接字uu段景山段景山5拆除连接拆除连接n n“通信通信结束束”的方法的方法讨论联联想日常生活中,挂想日常生活中,挂想日常生活中,挂想日常生活中,挂电话电话的情况的情况的情况的情况l l1 1、两个人商量好,然后各自挂机、两个人商量好,然后各自挂机、两个人商量好,然后各自挂机、两个人商量好,然后各自挂机uu过过于依于依于依于依赖赖高高高高层协议层协议,有碍服,有碍服,有碍服,有碍服务务器程序的通用性器程序的通用性器程序的通用性器程序的通用性l l2 2

7、、一方挂机,另一方听到忙音后挂机、一方挂机,另一方听到忙音后挂机、一方挂机,另一方听到忙音后挂机、一方挂机,另一方听到忙音后挂机uu过过于粗暴于粗暴于粗暴于粗暴l l3 3、对对于双向通信,于双向通信,于双向通信,于双向通信,A A方通知方通知方通知方通知“ “我没有新数据我没有新数据我没有新数据我没有新数据” ”了,了,了,了,B B方收到通知后,方收到通知后,方收到通知后,方收到通知后,发发完自己的数据后就可以挂机了。完自己的数据后就可以挂机了。完自己的数据后就可以挂机了。完自己的数据后就可以挂机了。uu可以可以可以可以让让双方的数据都得到完整交双方的数据都得到完整交双方的数据都得到完整交

8、双方的数据都得到完整交换换uu雅致关雅致关雅致关雅致关闭闭设计设计设计设计段景山段景山6拆除连接拆除连接分分别设计各种方式的算法各种方式的算法l l高高高高层协层协商商商商l l粗暴关粗暴关粗暴关粗暴关闭闭l l雅致关雅致关雅致关雅致关闭闭段景山段景山7拆除连接拆除连接1 1 1 1、两个人商量好,然后各自挂机、两个人商量好,然后各自挂机、两个人商量好,然后各自挂机、两个人商量好,然后各自挂机A AB B(want to cease the conversation)want to cease the conversation)data = “I want to stop”;data = “I

9、 want to stop”;send(data);send(data);recv (data);recv (data);recv(data);recv(data);if(data = “I want to stop”)if(data = “I want to stop”)if(state = AGREE)if(state = AGREE)send(“I agree”);send(“I agree”);if(data = “I agree”)if(data = “I agree”)closesocket(s);closesocket(s);goto end;goto end;elseelsec

10、ontinue conversationcontinue conversation goto back;goto back;closesocket(s);closesocket(s);goto end; goto end; elseelsesend(“I have more words”)send(“I have more words”)continue conversationcontinue conversation 段景山段景山8拆除连接拆除连接2 2 2 2、一方挂机,另一方听到忙音后挂机、一方挂机,另一方听到忙音后挂机、一方挂机,另一方听到忙音后挂机、一方挂机,另一方听到忙音后挂机A

11、 AB B(want to cease the conversation)want to cease the conversation)closesocket(s);closesocket(s);send(data);send(data);if( recv(data) = 0 )if( recv(data) 0)while(recv(data) 0) continue conversation; continue conversation; closesocket(s);closesocket(s);段景山段景山93 3、对于双向通信,、对于双向通信,、对于双向通信,、对于双向通信,A A方通

12、知方通知方通知方通知“ “我没有新数据我没有新数据我没有新数据我没有新数据” ”了,了,了,了,B B方收到通知方收到通知方收到通知方收到通知在发完数据后就可以挂机了。在发完数据后就可以挂机了。在发完数据后就可以挂机了。在发完数据后就可以挂机了。拆除连接拆除连接A AB B(want to cease the conversation)want to cease the conversation)if if(state = NO_DATA_SEND)state = NO_DATA_SEND)shutdown( SD_SEND );shutdown( SD_SEND );if(recv( dat

13、a ) = 0 )if(recv( data ) 0)while(recv(data)0)process data;process data;closesocket(s);closesocket(s);雅致关闭雅致关闭雅致关闭雅致关闭思考:在思考:在思考:在思考:在process dataprocess data中中中中如果需要发出数据怎么办?如果需要发出数据怎么办?如果需要发出数据怎么办?如果需要发出数据怎么办?段景山段景山10雅致关闭雅致关闭n n“ “雅致雅致雅致雅致” ”关关关关闭闭是是是是计计算机通信系算机通信系算机通信系算机通信系统统的特色的特色的特色的特色n n“ “雅致雅致雅致

14、雅致” ”关关关关闭闭可以使双方的数据都能完整接收可以使双方的数据都能完整接收可以使双方的数据都能完整接收可以使双方的数据都能完整接收/ /发发送送送送n n雅致关雅致关雅致关雅致关闭闭有多种方式(算法)可以有多种方式(算法)可以有多种方式(算法)可以有多种方式(算法)可以实现实现n n注意雅致关注意雅致关注意雅致关注意雅致关闭闭与高与高与高与高层协层协商的区商的区商的区商的区别别!l l高高高高层协层协商的缺点在于商的缺点在于商的缺点在于商的缺点在于协协商的可靠性不高商的可靠性不高商的可靠性不高商的可靠性不高l l雅致关雅致关雅致关雅致关闭闭的的的的优优点在于通点在于通点在于通点在于通过过系

15、系系系统统来通来通来通来通报报希望希望希望希望结结束的信息,提束的信息,提束的信息,提束的信息,提高了通用性和可靠性,降低了高了通用性和可靠性,降低了高了通用性和可靠性,降低了高了通用性和可靠性,降低了实现难实现难度度度度uu用用用用户户通知系通知系通知系通知系统统(“ “我没有数据了我没有数据了我没有数据了我没有数据了” ”) shutdownshutdown(SD_SENDSD_SEND););););uu系系系系统统通知用通知用通知用通知用户户(“ “对对方没有数据了方没有数据了方没有数据了方没有数据了” ”) recvrecv()函数的返回()函数的返回()函数的返回()函数的返回值为

16、值为0 0!段景山段景山11雅致关闭的实现雅致关闭的实现n n方法一、利用方法一、利用shutdown标准做法准做法l l算法思路算法思路算法思路算法思路A AB B无需要发送的数据后无需要发送的数据后无需要发送的数据后无需要发送的数据后shutdownshutdown(SD_SENDSD_SEND););););可以接收对方的数据直到可以接收对方的数据直到可以接收对方的数据直到可以接收对方的数据直到对方关闭套接字对方关闭套接字对方关闭套接字对方关闭套接字closesocketclosesocket()()()()whilewhile(recvrecv(datadata)0)0) proces

17、s(data); process(data);if(recv(data) = 0)if(recv(data) = 0)send(data)send(data)closesocket()closesocket() 雅致关闭并不对服务器和客户机程序有所区分雅致关闭并不对服务器和客户机程序有所区分雅致关闭并不对服务器和客户机程序有所区分雅致关闭并不对服务器和客户机程序有所区分段景山段景山12雅致关闭的实现雅致关闭的实现n n方法一、利用方法一、利用shutdown标准做法准做法l l算法算法算法算法if if(状态为发送完毕)(状态为发送完毕)(状态为发送完毕)(状态为发送完毕) shutdown(

18、 SD_SEND );shutdown( SD_SEND );while( recv( ) 0 )while( recv( ) 0 )processdata( );processdata( ); closesocket( );closesocket( );elseelsesend( );send( );if( recv( ) 0 )if( recv( ) 0 )processdata( );processdata( );elseelseshutdown( SD_RECV);shutdown( SD_RECV); 段景山段景山13socket函数与时序函数与时序SYNSYNSYN+ACKSYN+

19、ACKACKACKFINFINFINFINACKACKlistenlisten()()()()connectconnect()()()()connect()connect()返回返回返回返回acceptaccept()()()()sendsend()()()()sendsend()()()()recvrecv()()()()recvrecv()()()()shutdownshutdown(SENDSEND)closesocketclosesocket()()()()recvrecv()的返回()的返回()的返回()的返回recvrecv()()()()recvrecv()的返回值()的返回值(

20、)的返回值()的返回值=0=0ACKACKrecvrecv()()()()recvrecv()的返回值()的返回值()的返回值()的返回值=0=0closesocketclosesocket()()()()段景山段景山14雅致关闭雅致关闭n n方法二、方法二、利用利用closesocket( )不限不限时逗留逗留l l设设置套接字状置套接字状置套接字状置套接字状态为态为SO_DONTLINGER SO_DONTLINGER uuSO_DONTLINGERSO_DONTLINGER为为套接字默套接字默套接字默套接字默认认状状状状态态l l调调用用用用closesocketclosesocket(

21、);();();();l l系系系系统统并没有将套接字立即关并没有将套接字立即关并没有将套接字立即关并没有将套接字立即关闭闭,而是在,而是在,而是在,而是在发发完套接完套接完套接完套接口口口口结结构中待构中待构中待构中待发发送送送送队队列列列列上的所有数据后才关上的所有数据后才关上的所有数据后才关上的所有数据后才关闭闭struct socketstruct socketshort so_type;short so_type;short so_state;short so_state;struct sockbuf struct sockbuf so_rcv,so_rcv, so_sndso_sn

22、d; ; 段景山段景山15雅致关闭雅致关闭n n方法三、利用方法三、利用closesocket()限()限时逗留逗留l l设设置套接字状置套接字状置套接字状置套接字状态为态为SO_LINGERSO_LINGER,并,并,并,并设设置逗留的置逗留的置逗留的置逗留的时时间间uu超超超超时时间为时时间为非零非零非零非零值值l l调调用用用用closesocketclosesocket();();();();l l系系系系统统并没有将套接字立即关并没有将套接字立即关并没有将套接字立即关并没有将套接字立即关闭闭,而是在,而是在,而是在,而是在发发完套接完套接完套接完套接口口口口结结构中待构中待构中待构中

23、待发发送送送送队队列上的所有数据后,列上的所有数据后,列上的所有数据后,列上的所有数据后,或超或超或超或超时时后后后后才关才关才关才关闭闭l l若超若超若超若超时还时还有数据没有有数据没有有数据没有有数据没有发发完,只有完,只有完,只有完,只有丢丢弃数据,完成弃数据,完成弃数据,完成弃数据,完成关关关关闭动闭动作作作作段景山段景山16立即关闭立即关闭n n丢弃所有待弃所有待发送送/接收数据的方法接收数据的方法l l设设置套接字置套接字置套接字置套接字为为SO_LINGERSO_LINGER,并,并,并,并设设置逗留置逗留置逗留置逗留时间为时间为0 0l l调调用用用用closesocketcl

24、osesocket(),(),(),(),l lsocketsocket会会会会立即立即立即立即关关关关闭闭,资资源立即源立即源立即源立即释释放放放放l l注:注:注:注:TCPTCP层实层实体此体此体此体此时时配合配合配合配合发发送的是送的是送的是送的是RSTRST报报文文文文struct linger immediately;struct linger immediately;immediately.l_onoff = 1;immediately.l_onoff = 1;immediately.l_linger = 0;immediately.l_linger = 0;val = sets

25、ockopt(sock,SOL_SOCKET,SO_LINGER,val = setsockopt(sock,SOL_SOCKET,SO_LINGER, (char *)&immediately,sizeof(immediately); (char *)&immediately,sizeof(immediately);closesocket(sock);closesocket(sock);段景山段景山17socketsocketTCP/UDPTCP/UDP应用进程应用进程应用进程应用进程socket结构里的队列结构里的队列so_q0so_q0so_qso_qso_rcvso_rcvso_snd

26、so_snd数据到达数据到达数据到达数据到达送出数据送出数据送出数据送出数据shutdownshutdown()()()()closesocketclosesocket()()()()RECVRECVRECVRECV:关闭:关闭:关闭:关闭so_rcvso_rcv队列、释放数据队列、释放数据队列、释放数据队列、释放数据SENDSENDSENDSEND:关闭:关闭:关闭:关闭so_sndso_snd队列队列队列队列 发完发完发完发完so_sndso_snd队列上现有数据队列上现有数据队列上现有数据队列上现有数据DONTLINGERDONTLINGER:关闭:关闭:关闭:关闭so_rcvso_rc

27、v队列队列队列队列 发完发完发完发完so_sndso_snd上所有数据上所有数据上所有数据上所有数据立即关闭:关闭并释放立即关闭:关闭并释放立即关闭:关闭并释放立即关闭:关闭并释放so_rcvso_rcv队列队列队列队列 关闭并释放关闭并释放关闭并释放关闭并释放so_sndso_snd队列队列队列队列段景山段景山18拆除连接小结拆除连接小结n n小小结l lshutdownshutdown和和和和closesocketclosesocket都可以都可以都可以都可以实现实现关关关关闭连闭连接,接,接,接,但有不同。但有不同。但有不同。但有不同。uushutdownshutdown的雅致关的雅致关

28、的雅致关的雅致关闭闭可以保可以保可以保可以保证证高高高高层层数据的完整交数据的完整交数据的完整交数据的完整交换换uuclosesocketclosesocket的的的的“ “雅致关雅致关雅致关雅致关闭闭” ”只能保只能保只能保只能保证证TCPTCP实实体体体体间间的数的数的数的数据完整性据完整性据完整性据完整性uushutdownshutdown不不不不释释放套接字放套接字放套接字放套接字资资源源源源 注:是否可注:是否可注:是否可注:是否可继续继续利用套接字,利用套接字,利用套接字,利用套接字,请请大家大家大家大家测试测试uuclosesocketclosesocket释释放套接字放套接字放套接字放套接字资资源源源源l l结结合合合合队队列理解雅致关列理解雅致关列理解雅致关列理解雅致关闭闭的的的的实现实现方法,可以帮助我方法,可以帮助我方法,可以帮助我方法,可以帮助我们们丰富在模丰富在模丰富在模丰富在模块间设计块间设计接口接口接口接口队队列的列的列的列的经验经验

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号