-2

httpurlconnection がハングしている理由がわかりません。

次の設定があります: URL に接続し、応答コードが 200 かどうかを確認し、1 秒間スリープしない場合は httpurlconnection.disconnect() を呼び出してから再試行し、6 秒経過したら試行を停止して戻ります。200 応答コードがある場合は(if String (i =readLine())!=null、読み取りタイムアウトを 8 秒に設定して、バッファ付きリーダーで入力ストリームを読み取ってみてください。

これはすべてスレッドを使用して行われ、ハングする場合とハングしない場合があるため、Callableandexecutorserviceでテストしたため、30 秒後に入力ストリームが返されなくなった後に終了できました。しかしtimeoutexception、executor サービスから , がある場合、a を閉じるための finally ブロックはbufferedreader実行されず、何かがまだハングします。無限ループはなく、200 応答を取得するための 8 秒の読み取りタイムアウトと 6 秒の制限を考えると、コードhttpurlconnectionは 14 ~ 15 秒を超えることはありませんが、多くの場合はそうです。

に設定された変数が への呼び出しでストリームを正しく終了しない場合はありhttpurlconnectionますか? ?disconnect()?urlconnectionsetReadTimeout

4

2 に答える 2

0

次の設定があります: URL に接続し、応答コードが 200 かどうかを確認し、1 秒間スリープしない場合は httpurlconnection.disconnect() を呼び出してから再試行し、6 秒経過したら試行を停止して戻ります。200 応答コードがある場合は、(if String (i =readLine()))!=null を使用して、読み取りタイムアウトを 8 秒に設定し、バッファ付きリーダーで入力ストリームを読み取ってみてください。

すべて捨てて、URLConnection.setReadTimeout() を使用してください。それがそのためです。HTTP を使用しているため、「標準実装」を取得しているため、「無視」部分について心配する必要はありません。どうやらあなたはそれを試したことさえないか、すでに知っているでしょう。

于 2012-05-04T06:24:00.627 に答える
-1

痛い、それは不必要に複雑なソリューションのようです。Apache から Java HTTPCLient を使用しないのはなぜですか? http://hc.apache.org/httpcomponents-client-ga/

于 2012-05-02T21:36:46.060 に答える