以下是我尝试编写的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类没有成功。
最佳答案
由于SocketTimeoutException
是IOException
的子类,因此控制永远不会到达捕获SocketTimeoutException
的catch块。 IOException catch块将始终捕获异常
更改这些捕获块的位置:
catch (SocketTimeoutException e)
{
// process exception
}
catch (IOException ste)
{
// process exception
}