Java SocketTimeoutException指示为无法访问
以下是我试图编写的java应用程序的一小部分: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
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块
颠倒两个捕捉块的顺序,一切都会好起来。感谢您的快速回复。在审阅您的答复/回复并删除我的问题之前,我意识到了我的问题。不过,我非常感谢您的回复。谢谢您的快速回复。在审阅您的答复/回复并删除我的问题之前,我意识到了我的问题。不过,我非常感谢你的答复。