如何在Java中捕获套接字超时

如何在Java中捕获套接字超时,java,sockets,Java,Sockets,我正在用Java.net编写一个服务器。现在我想更改套接字超时的一些变量 我找不到“onTimeout”界面或类似的东西 现在我正在寻找这个问题的解决方案。您说您正在使用java.net,所以我假设您正在使用类似java.net.ServerSocket的东西。如果调用ServerSocket实例,则可以为套接字设置超时。然后,当您在调用期间阻止时,ServerSocket将跟踪超时。正如您在文档中所看到的,如果定义了超时并且等待时间超过了超时,accept将抛出一个SocketTimeoutE

我正在用Java.net编写一个服务器。现在我想更改套接字超时的一些变量

我找不到“onTimeout”界面或类似的东西


现在我正在寻找这个问题的解决方案。

您说您正在使用
java.net
,所以我假设您正在使用类似
java.net.ServerSocket
的东西。如果调用
ServerSocket
实例,则可以为套接字设置超时。然后,当您在调用期间阻止时,
ServerSocket
将跟踪超时。正如您在文档中所看到的,如果定义了超时并且等待时间超过了超时,accept将抛出一个
SocketTimeoutException
。因此,您最终会得到这样的结果(请原谅我对
Socket
s有点生疏):

try(ServerSocket ssock = new ServerSocket(...))
{
    ssock.setSoTimeout(10_000); // 10 second timeout
    while(true)
    {
        Socket csock = ssock.accept();
        methodToStartThreadThatHandlesClientSocket(csock);
    }
}
catch(SocketTimeoutException ste)
{
    //handle socket timeout
}
catch(Exception other)
{
    //handle other exceptions
}