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 秒ではなく 2 分かかります。このような場合、httpurl 接続を手動でタイムアウトにする方法

4

1 に答える 1

6

以下は、connectTimeoutとreadTimeoutの両方についてJavaマニュアルに記載されている内容です。

connectTimeout

このURLConnectionによって参照されるリソースへの通信リンクを開くときに使用される、指定されたタイムアウト値をミリ秒単位で設定します。接続が確立される前にタイムアウトが期限切れになると、java.net.SocketTimeoutExceptionが発生します。ゼロのタイムアウトは、無限のタイムアウトとして解釈されます。

readTimeout

読み取りタイムアウトを指定されたタイムアウトにミリ秒単位で設定します。ゼロ以外の値は、リソースへの接続が確立されたときに入力ストリームから読み取るときのタイムアウトを指定します。読み取り可能なデータが存在する前にタイムアウトが期限切れになると、java.net.SocketTimeoutExceptionが発生します。ゼロのタイムアウトは、無限のタイムアウトとして解釈されます。

ですから、あなたの場合、5秒以内に通信リンクを確立でき、入力ストリームを読み取らなかったと思います。したがって、動作は正しいです(Apacheがタイムアウトするまで待ちます)

于 2013-02-11T06:12:25.003 に答える