java - Java中如何检查服务器是否仍然与客户端连接?

标签 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();
    }

最佳答案

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

算法:

a) 在客户端和服务器上使用枚举“SEND_BEAT”和“RECEIVE_BEAT”设计两个命令。

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

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

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

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

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

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

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

希望上述算法能够满足您的需求。

关于java - Java中如何检查服务器是否仍然与客户端连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28185933/

相关文章:

sockets - IOCP 的 RIO 比事件有什么优势吗?

java - 在这种情况下我应该使用什么类型的消息传递? GUI 向线程发送命令; java

c# - 关闭最后一个连接后,如何通过套接字监听传入连接?

java - 通过https获取网页

java - 需要 JAXB 中的一个元素或另一个元素

java - 如何将 "filter"对象传递给 spring 数据 jpa 存储库以创建查询

java - JMX:MaxFileDescriptorCount 和 OpenFileDescriptorCount

java - 如何在不使用数组的情况下更改showConfirmDialog中的文本?

Python _socket.socket vs socket._socketobject,如何从一个转换为另一个

javascript - Firefox Web 扩展后台页面中的 Websocket