【发布时间】:2011-12-21 03:24:58
【问题描述】:
我有一个 Java 服务器。客户端通过 TCP 连接到服务器。这是我的问题的情况: 1- 2 个客户端连接到服务器(客户端 a 和客户端 b) 2-客户端与服务器通信 3-“客户端a”与互联网断开连接 4-客户端a的socket连接没有断开 5-当“客户端a”再次连接到互联网时,“客户端a”可以在不连接服务器的情况下向服务器发送消息。
我希望当“客户端 a”与互联网断开连接时,服务器和“客户端 a”之间的连接会结束。
您对此有什么意见吗?
【问题讨论】:
-
这到底是什么意思:“当“客户端a”再次连接互联网时,“客户端a”可以在不连接服务器的情况下向服务器发送消息。”
-
首先客户端断开与互联网的连接,然后再次连接到互联网。客户端连接到互联网后,客户端和服务器之间没有打开新的套接字。它的行为就像旧的套接字连接没有关闭(我认为实际上它没有关闭)。因此客户端可以向服务器发送消息,因为它永远不会与服务器断开连接。清楚了吗?
-
是的,这很清楚。那为什么会有问题呢?最初的连接从未中断,也没有人采取任何行动来中断它。如果您想检测断开连接并通过断开连接来做出响应,即使该连接可以在断开连接后继续存在,您也可以这样做。但这不是大多数人想要的,所以这不是默认行为。编写你想要的代码。
-
这是个问题,因为有很多客户端连接到服务器,如果有任何客户端断开连接,我必须通知其他客户端
-
那你需要写一些代码来实现客户端断线检测。您是在实现自己的协议还是这是一个记录在案的协议?它是否指定如何检测客户端断开连接?例如,查看RFC1459 section 4.6.2 了解 IRC 是如何做到的。