说我有一个名为SuperSocket的套接字变量,有什么办法可以捕获超时异常?
SuperSocket.setSoTimeout(5000);
catch (SocketTimeoutException e){
System.out.println("Timeout");
System.exit(1);
}
最佳答案
您似乎不了解setSoTimeout()
的功能以及何时会抛出该异常。
从Javadoc:(http://docs.oracle.com/javase/6/docs/api/java/net/Socket.html)
只能在对SocketTimeoutException
的基础Socket
进行阻塞读取并且在指定时间内未接收到数据(导致读取...超时)时,才抛出InputStream
(然后捕获)。
superSocket.setSoTimeout(5000);
InputStream is = superSocket.getInputStream();
int i;
try {
i = is.read();
} catch (SocketTimeoutException ste) {
System.out.println("I timed out!");
}
编辑添加:实际上还有另外一次可能引发异常,那就是如果您要调用
Socket.connect()
的两个参数版本来提供超时。关于java - 如何捕获SocketTimeoutException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13736899/