Java ServerSocket超时并退出服务器程序

Java ServerSocket超时并退出服务器程序,java,serversocket,Java,Serversocket,我试图实现一个服务器,它接受连接,但超时并关闭特定的连接,前提是它在N毫秒后没有从该连接接收到任何内容 由于我可能误解了ServerSocket的setSortimeoutt方法,我认为可以通过将N传递给setSortimeout来实现此行为 我所经历的是,一旦客户端建立了连接,并且在N秒内没有通过该连接发送任何内容,服务器就会捕获到SocketTimeoutException,但随后完全停止执行并结束运行服务器程序的进程。以下是我的服务器的侦听方法: 我成功捕获了SocketTimeoutEx

我试图实现一个服务器,它接受连接,但超时并关闭特定的连接,前提是它在N毫秒后没有从该连接接收到任何内容

由于我可能误解了ServerSocket的setSortimeoutt方法,我认为可以通过将N传递给setSortimeout来实现此行为

我所经历的是,一旦客户端建立了连接,并且在N秒内没有通过该连接发送任何内容,服务器就会捕获到SocketTimeoutException,但随后完全停止执行并结束运行服务器程序的进程。以下是我的服务器的侦听方法:

我成功捕获了SocketTimeoutException,忽略它,我知道!并假设导致异常的客户端连接已关闭。然后我就跳出catch块继续接受其他客户端连接。我在这里遗漏了什么?

您需要添加“继续”;而不是休息;在try-catch子句中。服务器将继续侦听

假设导致异常的客户端连接已关闭

错误的假设。接受是超时的。客户端连接尚未执行任何操作

然后我就跳出catch块继续接受其他客户端连接

错误,否,您突破catch块以停止接受其他客户端连接。你正在打破接受循环

我错过了什么

继续而不是休息


如果您不关心SocketTimeoutException,为什么要在ServerSocket上设置套接字超时?只需删除它。

有没有办法在客户端套接字上设置超时?Socket类上是否有一个方法可以让我实现所需的功能?是的,错误,setSocket,与您在ServerSocket上调用的方法相同。你看了吗?我的错,我一定错过了Socket的setSoTimeout方法;我以为它只适用于ServerSocket。再次感谢您对@EJP的详细回答
    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;
        }           
    } 
}