1

我试图以下列方式超时 httpurlconnection

URL urlConnect = new URL(url.toString());
HttpURLConnection.setFollowRedirects(false);
HttpURLConnection urlc = (HttpURLConnection) urlConnect.openConnection();
urlc.setConnectTimeout(1000*5);
urlc.setReadTimeout(1000*5);
urlc.connect();

但无法连接,它采用 apache tomcat 分配的 2 分钟超时,而不是我提供的 5 秒 g,在这种情况下如何手动超时 httpurlconnection

4

1 回答 1

6

以下是 Java 手册对 connectTimeout 和 readTimeout 的说明:

连接超时

设置一个指定的超时值,以毫秒为单位,在打开到此 URLConnection 引用的资源的通信链接时使用。如果在建立连接之前超时到期,则会引发 java.net.SocketTimeoutException。超时为零被解释为无限超时。

读超时

将读取超时设置为指定的超时,以毫秒为单位。当与资源建立连接时,非零值指定从输入流读取时的超时。如果在有数据可供读取之前超时到期,则会引发 java.net.SocketTimeoutException。超时为零被解释为无限超时。

因此,我认为在您的情况下,您设法在不到 5 秒的时间内建立了通信链接,并且您没有读取任何输入流。因此行为是正确的(等到 Apache 超时)

于 2013-02-11T06:12:25.003 回答