有没有办法区分连接超时和套接字超时?

3

Apache HttpClient框架允许您指定连接超时和套接字超时,如下所示:

final HttpParams httpParams = new BasicHttpParams();
if (connectionTimeout > 0) {
    HttpConnectionParams.setConnectionTimeout(httpParams, connectionTimeout);
}
if (socketTimeout > 0) {
    HttpConnectionParams.setSoTimeout(httpParams, socketTimeout);
}
HttpClient client = new DefaultHttpClient(httpParams);

我想要调整我的连接超时时间。这个问题很好地解释了设置之间的区别,但没有提供有关捕获异常的帮助。
我的问题是,每种类型的超时会引发什么异常?我有一个java.net.SocketTimeoutException;这是由连接超时还是套接字超时引起的?我怀疑是后者,特别是因为消息显示“读取超时”。连接超时会引发哪个异常?TimeoutExceptionConnectException?为什么Apache Http文档没有记录超时设置和引发的异常之间的关系? SocketTimeoutException的直接父类是InterruptedIoExceptionIOException;前者只有SocketTimeoutException作为子类,但IOException有许多子类。是否有另一个参考文献涵盖了可以从HttpClient的execute方法中预期收到的所有异常?它只声明可能会抛出IOException,这真的非常广泛。
1个回答

4

我还没有深入了解Java API中类之间的关系,但我认为你需要的是:

  1. java.net.ConnectException:由于网络错误、网络过载、对服务器的请求过多或防火墙而导致的数据包丢失。

  2. java.net.SocketTimeoutException:套接字超时是在将数据传输回调用者时保持服务器套接字打开的时间量。这可能甚至是服务器仍在处理并写回数据,但需要很长时间,客户端已经超时等待它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接