返回信息流最近在研究TCP服务器。写了一个服务器和一个客户端。客户端连接上服务器之后,一直不退出;服务器上会有一个过期时间,轮询到某个客户端超过过期时间没有发送心跳包就会主动关闭连接(相当于服务器实现了一个长连接,检测心跳来控制客户端连接的开关的功能),发现服务器关闭连接之后,客户端没有任何感知(除非客户端再次试图发送数据才会发现连接已经断开)。想问一下断开连接的四次握手这里为什么没有体现呢?为什么服务端断开连接的时候,客户端完全没有感知呢?
运行图片类似下面两幅图:
这是一条镜像帖。来源:北邮人论坛 / java / #59335同步于 2018/6/6
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
TCP服务端关闭连接,客户端怎样才会有感知
wislov
2018/6/6镜像同步12 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
1.有四次挥手,但是 java 的 socket 屏蔽了细节,socket.close() 关闭了双方的连接
2.有感知,socket.isClose()可以判断连接是否关闭
必须自己去判断吗?
【 在 flymop 的大作中提到: 】
: 1.有四次挥手,但是 java 的 socket 屏蔽了细节,socket.close() 关闭了双方的连接
: 2.有感知,socket.isClose()可以判断连接是否关闭
现在这个有客户端发给服务器的心跳包,但是没有服务器给客户端的心跳包
【 在 Wizmann 的大作中提到: 】
: 挥手的细节OS层帮你解决了。但是OS也不会主动告诉你。
: TCP层有心跳,但是和应用层没关系。
: 应用层心跳包可以考虑一下。
是啊,现在就是这样。是不是可以发之前,先用socket.isClosed()方法检测一下?
【 在 Wizmann 的大作中提到: 】
: 客户端发数据的时候就应该知道连接断了。
:
伟大的sctp只有三次挥手,辣鸡tcp
【 在 flymop 的大作中提到: 】
: 1.有四次挥手,但是 java 的 socket 屏蔽了细节,socket.close() 关闭了双方的连接
: 2.有感知,socket.isClose()可以判断连接是否关闭