采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师,在第四次挥手时,如果客户端发送一个FIN命令,他就断开输出流了,那后面当客户端收到服务端的两个回送命令时,客户端怎么可以又向服务端发送一个ACK命令
理论来说 FIN 命令发送后的一段时间内是处于等待的时间,在某些语言或者机器上会有超时机制,会等待一段时间;
在等待时间内如果客户端有回送一个命令代表收到,但是没有回送客户端关闭的话,代表此时还有数据没传输完成;此时服务器,会尝试更改其等待操作的时间,一般会改成2小时,但不是绝对。
如果客户端一句也没有回送命令,此时也会进入等待阶段,但是等待时间不会太长,一般在几分钟内得到相应。
如果没有得到响应则会尝试进行关闭操作;也有可能是抛出异常的操作。
这取决于具体的语言,与系统内部实现有所不同。
在某些极端情况下,可能在上述情况下都会出现无限等待的情况。此时就需要借助心跳包与当前客户端活跃性扫描的机制来进行强制关闭操作了。
看不懂在说啥,能不能直接回答一下他的问题?是不是意思就是,客户端回复第一个ACK之后,并没有断开输出流?
流其实并不存在牢固不变的链接,比如我的电脑和你的电脑之间,可能我发了一个消息后立刻就停电了,但对方并不知道我的状态,所以会发送数据过来等待我的确认;但这个等待时间是有时限的,超过时限就认为我真的断开了。 但,假如,我发多个消息的过程中,处于一会儿断电,一会儿恢复的状态,其实对方并不会知道我时断时续;当然这个比喻有些放大时常;实际的Socket传输相互确认的时间会短很多。
这个问题很刁钻 哈哈
登录后可查看更多问答,登录/注册
理论+实践,系统且深入掌握Socket核心技术,从容应对各种Socket应用场景的不二之选
2.8k 1
1.8k 7
1.7k 5
1.9k 13
1.1k 13