如何在Java中检查服务器是否仍然连接到客户端?

时间:2015-01-28 06:22:09

标签: java sockets

我想在从流中读取之前检查服务器是否仍然连接到客户端。如何在java中做到这一点?我目前的代码如下。这只检查客户端套接字吗?

public void receiveResultFromServer() {
    try {
        while(!clientSocket.isClosed()) {
            try{
                Object obj = inStream.readObject();
                if (obj instanceof Command) {
                    ConnectionManager.parseCommand((Command) obj);
                } else if (obj instanceof CommandExecResult) {
                    ConnectionManager.parseCommandExecutionResult((CommandExecResult) obj);
                }
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }catch (IOException e) {
                e.printStackTrace();
            }
        }
    } catch(Exception e) {
        e.printStackTrace();
    }

2 个答案:

答案 0 :(得分:1)

在阅读流之前了解连接性并不好。而是设计一个心跳机制。

算法:

a)使用enum" SEND_BEAT"设计两个命令和" RECEIVE_BEAT"在客户端和服务器上。

b)现在,一旦您的服务器启动,启动一个线程,使用命令从服务器向客户端发送信号(握手协议),客户端将响应信号到服务器

c)此发送信号作业可以定期安排,使用Java Timer和TimerTask类,例如。

  scheduleAtFixedRate(new RunTimer(), 5000, 1000);

d)在响应的基础上,维护客户端在服务器上的状态。

e)现在您可以使用status来检查客户端和服务器之间的连接。

f)事实上,您甚至可以设计一种重新连接机制,在最终更新之前会尝试一定次数。

h)您还需要根据需要将状态维持为检查点。

希望以上算法满足您的需求。

答案 1 :(得分:0)

如果对等方已断开连接,则代码将抛出EOFException。如果网络出现故障,它可能会永远阻塞,因此您可能需要考虑使用读取超时,这将导致SocketTimeoutException