在java中,客户端如何知道服务器已退出?
因此,我正在使用java构建一个非常简单的服务器/客户端复合体。到目前为止,我已经设法弄清楚了如果客户端退出会发生什么,因为服务器在侦听来自客户端的任何输入时会收到null 但是-如果客户端已连接,而服务器出于任何原因退出,会发生什么情况。。。服务器应该等待来自客户机的输入,但是客户机怎么知道服务器不再侦听呢?对我来说,客户端对服务器的调用只是进入了无效状态。。。什么都没发生 我能做些什么来查明服务器什么时候停机吗?暂停,打乒乓球什么的 正如你所看到的,我对这一点很陌生,我只是好奇。自从我在大学里学习计算机科学以来,这对我来说一直是个谜 提前谢谢。dr_xemacs.(我假设您使用的是阻塞服务器套接字和套接字,而不是非阻塞服务器套接字) 与服务器类似,从关闭连接的流中读取将返回null 但是,如果您不想依赖于此或担心与服务器的连接会以某种方式持续,您也可以使用超时(签出!),这将在时间到时抛出SocketTimeoutException,为了跟踪服务器是否已启动,请创建ping/数据包以确保服务器仍在运行在java中,客户端如何知道服务器已退出?,java,server,timeout,client,Java,Server,Timeout,Client,因此,我正在使用java构建一个非常简单的服务器/客户端复合体。到目前为止,我已经设法弄清楚了如果客户端退出会发生什么,因为服务器在侦听来自客户端的任何输入时会收到null 但是-如果客户端已连接,而服务器出于任何原因退出,会发生什么情况。。。服务器应该等待来自客户机的输入,但是客户机怎么知道服务器不再侦听呢?对我来说,客户端对服务器的调用只是进入了无效状态。。。什么都没发生 我能做些什么来查明服务器什么时候停机吗?暂停,打乒乓球什么的 正如你所看到的,我对这一点很陌生,我只是好奇。自从我在大学
编辑:我做了一个快速搜索,可能对你有用!看一看 您的服务器可能正在某个端口上运行,因此您可以在客户端添加运行状况检查,并使用状态更新全局标志,以让客户端了解其可用性:-
Socket socket = null;
try
{
socket = new Socket(host, port);
return true;
}
catch (Exception e)
{
return false;
}
finally
{
if(socket != null)
try
{
socket.close();
}
catch(Exception e){}
}
客户端如何知道服务器不再侦听
如果客户端不尝试在某个级别与服务交互,它将不知道
假设客户端已发送请求,则会出现一些不同的场景
- 如果服务不再侦听指定端口,客户端通常会收到“连接被拒绝”异常
- 如果服务仍在运行(从某种意义上说),但工作不正常,则来自客户端的连接尝试可能会超时
- 如果服务的主机关闭,客户端将获得超时
- 如果存在网络连接或防火墙问题,客户端可能会出现超时或其他异常