我试图实现接受连接但超时的服务器,并且只关闭了该特定连接如果它在N毫秒后没有收到来自该连接的任何内容。ServerSocket超时并退出服务器程序
从我对ServerSocket
的setSoTimeout(int milliseconds)
方法可能存在的误解中,我认为这种行为可以通过将N传递给setSoTimeout
来完成。
我遇到的情况是一旦客户端建立连接,并且在N秒内不发送任何通过该连接的任何内容,服务器将捕获一个SocketTimeoutException
,但会完全停止执行并结束运行服务器程序的进程。这里是我的服务器的listen
方法:
private static void listen() throws IOException {
while(true) {
try {
Socket clientSocket = serverSocket.accept();
Connection connexion = new Connection(clientSocket);
connexion.start();
} catch (SocketTimeoutException e) {
System.out.println("Socket timed out!");
break;
}
}
}
我成功地捕捉SocketTimeoutException
,忽略它,认为导致异常的客户端连接被关闭(坏我知道了!)。然后我跳出catch块继续接受其他客户端连接。我在这里错过了什么?
有没有一种方法可以在客户端套接字上设置超时呢?是否有'Socket'类的方法可以实现我想要的功能? – cbrad 2014-10-30 07:59:33
是的,错误,'setSoTimeout()',你在'ServerSocket'上调用的那个。你甚至看过? – EJP 2014-10-30 20:34:38
我的不好,我一定错过了看到'''''setSoTimeout'方法;我认为它只适用于'ServerSocket'。再次感谢您提供丰富的答案@EJP – cbrad 2014-10-30 20:55:41