Java SocketTimeoutException指示为无法访问

Java SocketTimeoutException指示为无法访问,java,Java,以下是我试图编写的java应用程序的一小部分: Socket socket = new Socket(hostname, portnumber); DataInputStream socketInput = new DataInputStream(socket.getInputStream()); try{ socket.setSoTimeout(10000); try{ byte[] msgHeader = new byte[4]; if (so

以下是我试图编写的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
}
我收到一个错误,说明捕获(SocketTimeoutException)不可访问。我想建立一个套接字超时,以防止套接字read()永远阻塞,如果发生SocketTimeoutException,我的应用程序将尝试建立到下一个可用服务器的套接字连接,并尝试相同的read()操作


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

因为
SocketTimeoutException
IOException
的子类,所以控件永远不会到达正在捕获
SocketTimeoutException
的catch块。IOException捕获块将始终捕获异常 更改这些挡块的位置:

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

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

 catch (SocketTimeoutException e)
    {
        // process exception
    }
    catch (IOException ste)
    {
        // process exception
    }
请看:SocketTimeoutException扩展了IOException。因此,如果一个被抛出try块,它将被第一个catch块捕获,因此永远不会到达第二个catch块

颠倒两个catch块的顺序,一切都应该正常。

查看:SocketTimeoutException扩展IOException。因此,如果一个被抛出try块,它将被第一个catch块捕获,因此永远不会到达第二个catch块


颠倒两个捕捉块的顺序,一切都会好起来。

感谢您的快速回复。在审阅您的答复/回复并删除我的问题之前,我意识到了我的问题。不过,我非常感谢您的回复。谢谢您的快速回复。在审阅您的答复/回复并删除我的问题之前,我意识到了我的问题。不过,我非常感谢你的答复。