以下是我尝试编写的Java应用程序的一小部分:

Socket socket = new Socket(hostname, portnumber);
DataInputStream socketInput = new DataInputStream(socket.getInputStream());
try{
    socket.setSoTimeout(10000);
    try{
        byte[] msgHeader = new byte[4];
        if (socketInput.read(msgHeader) != -1)
        {
            // process message
        }
    }
    catch (IOException e)
    {
        // process exception
    }
    catch (SocketTimeoutException ste)
    {
        // process exception
    }
}
catch (SocketException se)
{
    // process exception
}


我收到一个错误,指出catch(SocketTimeoutException)无法访问。我想建立一个套接字超时,以防止套接字read()永远阻塞,如果SocketTimeoutException发生,我的应用程序将尝试与下一个可用服务器建立套接字连接,并尝试相同的read()操作。

非常感谢提供的任何帮助,因为我尝试使用不同的IO类没有成功。

最佳答案

由于SocketTimeoutExceptionIOException的子类,因此控制永远不会到达捕获SocketTimeoutException的catch块。 IOException catch块将始终捕获异常
更改这些捕获块的位置:

 catch (SocketTimeoutException e)
    {
        // process exception
    }
    catch (IOException ste)
    {
        // process exception
    }

10-07 19:40
查看更多