2

興味深い問題があります。

その中に、電話がルーターに接続されている状態を説明しようとしているアプリケーションがありますが、そのルーターはインターネットに接続されていません。

接続を確立する方法を複数試しましたが、この状態を説明するタイムアウトはありません。

私はもう試した:

HttpParams httpParameters = new BasicHttpParams();
int timeoutSocket = 1000;
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutSocket);

私も試しました:

HttpURLConnection huc = (HttpURLConnection)serverAddress.openConnection();

huc.setDoOutput(true);
huc.setRequestMethod("PUT"); // For amazon
//huc.setRequestMethod("POST"); // For regular server.
huc.setRequestProperty("Content-Type", "text/plain");
huc.setRequestProperty("Content-Length", String.valueOf(bytes));
huc.setFixedLengthStreamingMode(bytes);
huc.setConnectTimeout(1000); // Establishing connection timeout
huc.setReadTimeout(1000);

しかし、どちらの場合も、出力ストリームを実行/取得すると、UnknownHostException エラーを受け取るまでに約 20 秒かかります。

その結論に達するまでに、最大 5 秒に短縮してほしいと思います。

これを行う方法はありますか?

乾杯

4

2 に答える 2

2

多くの検索とこのリンクの助けを借りて、これまでのところ機能している確かな解決策を見つけました。

結論についての私の理解は、次のような方法を使用する場合です。

DataOutputStream wr = new DataOutputStream(huc.getOutputStream());

また

InputStream is = ucon.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);

(アップロードまたはダウンロード)

ボンネットの下で多くのことが起こっています。DNS ルックアップ呼び出しを含みます。接続なしでルーターに接続している場合、最終的に UnknownHostException に到達するまでに約 20 秒かかります。

ただし、上記のコードが実行される前に、このコード行を最初に追加すると、次のようになります。

InetAddress iAddr = InetAddress.getByName("myserverName.com");

次に、適切な SocketTimeOutException が返され、希望/期待どおりに正確に応答します。上記のコード行は明らかに DNS ルックアップをキャッシュし、タイムアウトは期待どおりに機能します。

また、注意すべき点: 失敗がキャッシュされると、上記のコードを実行すると、他の前のコードと同じくらい失敗するまでに時間がかかります。(何がこれをトリガーするのか正確にはわかりません)しかし、インターネットに再度接続してから、接続されているが接続されていない状態に再び入ると、以前の成功がキャッシュされ、タイムアウトが再び適切に機能します.

これを見つけたり理解したりするのは特に簡単ではなかったので、これが誰かの役に立てば幸いです。

乾杯、

于 2012-12-10T23:32:54.673 に答える
0

5000 ミリ秒の制限がある CountDownTimer を実装できます。これを参照してくださいhttp://dewful.com/?p=3

于 2012-12-08T04:30:26.867 に答える