0

重複の可能性:
接続タイムアウトと読み取りタイムアウトがデフォルト (無限) に設定されているにもかかわらず、要求タイムアウトを受信して​​いますか?

Web サービスに接続しようとすると、SocketTimeoutException約 20 秒後に を受け取りました。Web サービスをホストしている Tomcat サーバーがダウンしているため、これExceptionが予期されます。ただし、ConnectTimeout と ReadTimeout の値を設定していません。ドキュメントによると、これら 2 つのデフォルト値は無限です。

これの 1 つの可能性は、接続しようとしたサーバーに独自のタイムアウトがあることです。しかし、友人が iOS を使用して接続しようとすると、約 1 分 15 秒後に接続がタイムアウトしました。サーバーがタイムアウトを発行している場合、接続はほぼ同時にタイムアウトするはずです。彼は iOS のデフォルトのタイムアウトも使用していることに注意してください。

  • 接続と読み取りのタイムアウトが無限に設定されているのに、ソケットのタイムアウトが非常に早いのはなぜですか?
  • ソケットタイムアウトは、接続および読み取りタイムアウトとは異なりますか? もしそうなら、それはどう違うのですか?
  • ソケット タイムアウトの値を知るにはどうすればよいですか? HttpURLConnection を使用しています。
  • ソケットのタイムアウトを設定する方法はありますか? どのように?

以下は私のコードのスニペットです:

httpURLConnection = (HttpURLConnection) ((new URL("http://www.website.com/webservice")).openConnection());
httpURLConnection.setDoInput(isDoInput);
httpURLConnection.setDoOutput(isDoOutput);
httpURLConnection.setRequestMethod(method);

try
{
    OutputStreamWriter writer = new OutputStreamWriter(httpURLConnection.getOutputStream());
    writer.write("param1=value1");
    writer.flush;
}catch(Exception e)
{

}
4

2 に答える 2

3

接続と読み取りのタイムアウトが無限に設定されているのに、ソケットのタイムアウトが非常に早いのはなぜですか?

コードをください。

ソケットタイムアウトは、接続および読み取りタイムアウトとは異なりますか? もしそうなら、それはどう違うのですか?

SocketTimeoutException読み取りタイムアウトです。

ソケット タイムアウトの値を知るにはどうすればよいですか? HttpURLConnection を使用しています。

HttpURLConnection.getReadTimeout(); またHttpURLConnection.getConnectTimeout()

ソケットのタイムアウトを設定する方法はありますか? どのように?

HttpURLConnection.setReadTimeout().

これらのメソッドはすべて、元の投稿で既に引用しています。なぜここで彼らについて尋ねるのですか?

于 2012-05-08T04:16:04.483 に答える
0

最後に、タイムアウトの原因がわかりました! タイムアウトを引き起こしているのは実際にサーバーであることがわかりました。iOSを使用しているときに1分を超える別のタイムアウトを受け取っているため、最初はこれを疑っています。

私のTomcatサーバーを保持しているオペレーティングシステムはWindowsです。応答のない接続に対する Windows のデフォルトの再試行回数は 2 です。したがって、最初の接続試行が失敗した場合でも、再試行は 2 回残っています。再試行はすべて内部で行われます。各再試行の時間の計算方法はわかりませんが、基本的には 3 + 6 + 12 = 21 秒です。

  • 1 回目の再試行 = 3 秒
  • 2 回目の再試行 = 6 秒
  • 3 回目の再試行 = 12 秒

3 回目の再試行の後、接続は切断されます。また、その時までに、すでに 21 秒間待機していました。

于 2012-05-08T08:14:18.353 に答える