2012-05-02 12 views
-2

私のhttpurlconnectionが掛かっている理由を理解できないようです。java.net、hanging in java

私は次の設定をしています:接続URL、応答コードが200であるかどうかをチェックし、1秒間スリープしない場合はhttpurlconnection.disconnect()を呼び出してから6秒後に再試行してください。 200レスポンスコードの場合は、(if String (i =readLine())!=nullを使用して、bufferedreaderで入力ストリームを読み込み、読み取りタイムアウトを8秒に設定します。

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

のでhttpurlconnectionに変数セットは、正しくもdisconnect()?への呼び出しでストリームを終了しませんいずれにせよ、urlconnectionsetReadTimeout方法状態のjavadocがあります:「この方法のいくつかの非標準の実装は無視します指定されたタイムアウト "とは何ですか?

+2

聖書のバットマンの壁。これは少し書いてみて、最も重要なのはあなたのコードを表示してみてください。 –

+0

多くの単語が1つの段落にあります! –

+0

あなたは理解していませんか? – EJP

答えて

-1

これは不必要に複雑な解決策のようです。なぜApache HTTPのJava HTTPClientを使用しないのですか? http://hc.apache.org/httpcomponents-client-ga/

+1

不必要に複雑なソリューションと思われるものは何ですか? – EJP

+0

OPは、自分自身のロールクライアントと通信しようとしているようです。私はこれを行うもっと簡単な方法があることを指摘していました。 – Joon

0

私は次のセットアップを持っている:6秒で通過した場合、停止し、再試行し、)( をhttpurlconnection.disconnectを呼び出し、応答コードが 200の場合は1秒間スリープしない場合は、チェックし、URLを接続し、試行錯誤してください。 は200応答コードをtheresの場合、8秒に 読み取りタイムアウトを設定し、(もし文字列(I =のreadLine())!= nullのを使用して、 をBufferedReaderで入力ストリームを読み込みしてみてください。

投げそれがすべてHTTPConnection.setReadTimeout()を使用すると、それが目的としているものです.HTTPを使用しているときには、 '標準実装'が得られますので、 '無視する'部分について心配する必要はありません。それともあなたはすでにそれを知っているでしょう