我想在从流读取之前检查服务器是否仍然连接到客户端。在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/