以下是我试图编写的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类没有成功。
答案 0 :(得分:0)
由于SocketTimeoutException
是IOException
控件的子类,因此控件永远不会到达正在捕获SocketTimeoutException
的catch块。异常将始终由IOException catch块捕获
改变那些捕获块的位置:
catch (SocketTimeoutException e)
{
// process exception
}
catch (IOException ste)
{
// process exception
}
答案 1 :(得分:0)
查看the javadoc:SocketTimeoutException扩展IOException。因此,如果在try块中抛出一个,它将被第一个catch块捕获,因此永远不会到达第二个catch块。
反转两个捕获块的顺序,一切都应该没问题。