Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.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-Handle程序终止_Java_Client Server_Quit - Fatal编程技术网

Java-Handle程序终止

Java-Handle程序终止,java,client-server,quit,Java,Client Server,Quit,我有一个用java编写的服务器-客户端对,如果另一个应用程序退出,我想退出它。这是怎么做到的? 我还想知道,如果用户手动退出应用程序(即按cmd+q.alt+F4等),如何让程序执行一系列命令(例如关闭套接字等)通常的方法是让心跳线程单独运行。其工作方式是- 每个客户机运行一个心跳线程,并将定期向服务器发送消息,实质上说“我正在运行”。你可以调整 消息之间的时间间隔应符合您的要求 服务器运行一个心跳监听器线程,并将维护一个正在运行的客户端列表 一旦所有客户端停止发送消息,服务器可以等待几分钟,然

我有一个用java编写的服务器-客户端对,如果另一个应用程序退出,我想退出它。这是怎么做到的?
我还想知道,如果用户手动退出应用程序(即按cmd+q.alt+F4等),如何让程序执行一系列命令(例如关闭套接字等)

通常的方法是让心跳线程单独运行。其工作方式是-

  • 每个客户机运行一个心跳线程,并将定期向服务器发送消息,实质上说“我正在运行”。你可以调整 消息之间的时间间隔应符合您的要求

  • 服务器运行一个心跳监听器线程,并将维护一个正在运行的客户端列表

  • 一旦所有客户端停止发送消息,服务器可以等待几分钟,然后正常关闭


  • 此设计可用于单个客户端或多个客户端。

    当一个客户端退出时,它会向另一个客户端发送消息,从而导致其退出


    一种方法是毒丸消息/对象,当收到该消息时,它会导致接收者关机。

    有很多方法可以做到这一点……当一方退出时,它会向另一方发送一条消息,导致另一方退出。正如@Oleg所说,有很多方法可以点播它。只要确保您使用您选择的任何解决方法关闭套接字连接,就可以避免在下次运行应用程序时出现套接字已绑定错误code@PeterLawrey你能在回答中写下你的评论,这样我就可以接受了吗?我喜欢在需要的时候使用心跳,但这里的问题是网络中的任何不可靠性你会“认为”这个项目已经结束了。“网络连接丢失”与“我退出服务器,我希望客户端也退出”不同。我宁愿发送一条消息“我要挂了,你也应该挂了”,以便在使用心跳打印“网络连接丢失”消息时正确退出。@user988052:如果你担心心跳消息在网络中丢失,那么你如何确保“我要挂了,所以你应该挂了”消息会到达服务器?此外,我们不打算通过UDP发送心跳信号,而是使用内置可靠性的TCP套接字。除此之外,您还可以构建冗余,例如,如果超过1分钟未收到心跳信号,则服务器将关闭。这种方法比客户端告诉服务器我正在关闭要好,因为客户端可能会崩溃,可能永远无法发送消息。网络规则第一条:“网络不可靠”。TCP与否,这被认为是第一条也是最重要的网络规则。然后,我不是说确保“正在下降”消息将到达服务器。我说的是在服务器停机时使用正确的消息。当然,如果在您发送“正在下降”消息时网络恰好关闭,您可能会错过一条消息,但这样做不会出现误报。这与依靠网络来保证可靠性是非常不同的(事实并非如此,这是网络规则的第一条)。