一分钟不活动后关闭 TCP 连接

Close TCP connection after a minute of inactivity

我有一个服务器,每次客户端连接到它时都会创建一个新线程(客户端处理程序)。如果客户端处理程序在一分钟内未收到来自客户端的 DataInputstream 消息,我希望客户端处理程序关闭连接。

我试过:

if (System.currentTimeMillis() > startTime + 60000) {
    System.out.println("Time up!!! for client: "+this.socket);
    dos.writeUTF("close");
    this.socket.close
    break;
}

但是,这只会在客户端发送消息后到达 if 语句,我想在客户端不活动 1 分钟后自动关闭连接。

有多种情况:

  1. 最后一次读取后的超时应该是 60 秒:只需设置 read() 超时:socket.setSoTimeout(60*1000); 所以如果读取线程在一分钟内没有收到任何数据,read() 请求将失败.相应地处理该异常,您就知道了。
  2. 总连接超时应为 60 秒,但输入仍以阻塞模式完成:与 (1) 相同,但在每次成功读取后减少给定超时:socket.setSoTimeout(msLeft);
  3. 总连接超时应为 60 秒,但输入可以在非阻塞模式下完成:这与您在示例中使用的 类 非常不同,但这是一个很好的指南对此:Non-blocking sockets.

但是,如果可能的话,我会坚持阻止 I/O,出于很多原因,它只是更好。