Java 客户端和服务器之间的连接不存在';t端

Java 客户端和服务器之间的连接不存在';t端,java,tcp,Java,Tcp,我有一个Java服务器。客户端通过TCP连接到服务器。我的问题是这样的: 1-2个客户端连接到服务器(客户端a和客户端b) 2-客户端与服务器通信 3-“客户端a”与internet断开连接 4-客户端a的套接字连接未断开 5-当“客户端a”再次连接到internet时,“客户端a”可以向服务器发送消息,而无需连接到服务器 我希望服务器和“客户机a”之间的连接在“客户机a”与internet断开连接时结束 你对此有什么看法吗?当一台机器与互联网断开连接时,它无法通过互联网发送任何数据。这包括发送

我有一个Java服务器。客户端通过TCP连接到服务器。我的问题是这样的: 1-2个客户端连接到服务器(客户端a和客户端b) 2-客户端与服务器通信 3-“客户端a”与internet断开连接 4-客户端a的套接字连接未断开 5-当“客户端a”再次连接到internet时,“客户端a”可以向服务器发送消息,而无需连接到服务器

我希望服务器和“客户机a”之间的连接在“客户机a”与internet断开连接时结束


你对此有什么看法吗?

当一台机器与互联网断开连接时,它无法通过互联网发送任何数据。这包括发送关闭或中止连接所需的数据包。因此,如果断开连接,客户端无法关闭连接。如果需要这样做,服务器必须这样做。如果您需要这种能力,应用程序协议必须提供它。

好的,有意见和有解决方案是两件不同的事情:-)


我建议在服务器端的连接中添加一个keepalive超时。每隔(几秒钟?几分钟?)发送一次keep alive,如果没有keepalive响应,请终止服务器端的连接。

这到底是什么意思:“当“客户端a”再次连接到internet时,“客户端a”可以向服务器发送消息,而无需连接到服务器。”首先,客户端断开与internet的连接,然后再次连接到internet。客户端连接到internet后,客户端和服务器之间不会打开新的套接字。它的行为就像旧的套接字连接没有关闭一样(我认为实际上它没有关闭)。因此,客户端可以向服务器发送消息,因为它从未断开与服务器的连接。清楚了吗?是的,清楚了。那为什么这是个问题呢?最初的连接从未中断,也没有人采取任何行动来中断它。如果您想检测断开连接并通过断开连接进行响应,即使该连接可以在断开连接后继续存在,您也可以这样做。但这不是大多数人想要的,因此这不是默认行为。这是一个问题,因为有许多客户端连接到服务器,如果有任何客户端断开连接,我必须通知其他客户端。您需要编写一些代码来实现客户端断开检测。您是在实施自己的协议,还是这是一个记录在案的协议?它是否指定了如何检测客户端断开连接?例如,看看IRC是如何做到的。是的,你是对的,实际上我需要解决方案(:我想用你的答案澄清一些事情。你告诉我在服务器端实现某种东西,每隔几秒钟发送一个保持活动状态的请求,如果没有对此请求的响应,这意味着客户端不再连接到服务器。对吗?这是某种从服务器ping客户端的方式。对吗?是的,就是这样。如果你不这样做如果得不到回应,就杀了它。