Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java多客户端服务器套接字。管道破裂检测_Java_Sockets - Fatal编程技术网

Java多客户端服务器套接字。管道破裂检测

Java多客户端服务器套接字。管道破裂检测,java,sockets,Java,Sockets,我正在创建一个具有多个客户端的服务器解决方案。使用arraylist存储用户信息和套接字。广播消息 在客户方面 当服务器关闭时,将抛出一个异常,我可以捕获该异常并执行 相应的行动 但在服务器端 当客户端脱机时,服务器不会引发异常。有没有什么方法可以实现 我现在每10秒发送一条boardcast消息,查看连接是否正常。而不是缩短健康检查boardcast消息之间的间隔。如果有任何方法可以做到这一点,比如setListener?java中有很多针对这种类型连接的解决方案(如Apache Mina),

我正在创建一个具有多个客户端的服务器解决方案。使用arraylist存储用户信息和套接字。广播消息

在客户方面

当服务器关闭时,将抛出一个异常,我可以捕获该异常并执行 相应的行动

但在服务器端

当客户端脱机时,服务器不会引发异常。有没有什么方法可以实现


我现在每10秒发送一条boardcast消息,查看连接是否正常。而不是缩短健康检查boardcast消息之间的间隔。如果有任何方法可以做到这一点,比如setListener?

java中有很多针对这种类型连接的解决方案(如Apache Mina),但是也就是说,除非客户端发送消息通知服务器它将要断开连接,否则没有其他方法可以告诉服务器,除非服务器和客户端之间的心跳发生故障,听起来你已经实现了。您可以看到将侦听器用作故障安全解决方案的问题,因为如果客户端出现故障,它将永远不会让服务器知道,并且您将有一个孤立的会话。

客户端套接字上没有任何onClose方法?还是可以实施它?谢谢你,你必须实施它。就像我说的,它仍然不是完美的。如果客户端设备上的电源关闭怎么办?它不会告诉服务器任何事情,服务器会在下一次心跳时抛出错误。我知道它不会告诉服务器任何事情。我要实现我自己。但是如果有异常抛出,我可以在catch块内调用回调方法。但如果我强制关闭设备或程序。客户端中也没有显示错误。所以唯一的解决方案就是在服务器的下一个心跳信号上抛出一个错误?顺便说一句,谢谢:DOk听起来像是你的基础已经被连接到客户端的服务器los覆盖了。在客户端,您可以设置一个超时时间,如果没有收到服务器的消息,可以在该时间内关闭连接。因此,如果每10秒有一次ping,那么超时时间可能是30秒。推送邮件的工作原理类似:。我现在所做的就是你所说的方法。每10秒Ping一次。但是这个程序在小学里使用。大约300个客户端每10秒对服务器进行ping操作。学校的网络也很差。我想尽可能减少带宽的使用。我知道平不会花太多钱,但我只是想找个更好的办法。当套接字释放时,将调用一个方法,我可以在其中设置一些异常操作:D谢谢你。