0

これは私のコードです:

connection.setConnectTimeout(5000);
ObjectOutputStream out=new ObjectOutputStream(connection.getOutputStream());
out.writeObject(to_be_sent);
out.flush();
out.close();
int resp_code=connection.getResponseCode();
if(resp_code==200)
{
 JOptionPane.showMessageDialog(obj.frame, "Your Application has been sent Successfully");
}

ご覧のとおり、接続タイムアウトを 5 秒に設定しました。この接続時例外がいつスローされ、どの行がスローされるかを知りたいです。connection.getResponseCode() が 5 秒間何も返さない場合にスローされますか?
編集
javadocs を調べたところIOException、サーバーに接続できない場合にのみ getResponse コードがスローされることがわかりました。

4

3 に答える 3

2

この接続時例外がいつスローされ、どの行がスローされるかを知りたいです。

出力ストリームを開くステートメントで発生すると思います。

ただし、最善の答えは、自分で試して確認することです。全体に try/catch を配置し、タイムアウトする URL への接続を試行してから、スタックトレースを調べて、タイムアウト例外がどこから来たかを確認します。


今javadocsを調べたところ、サーバーに接続できない場合にgetResponseCode()のみスローされることがわかりました。IOException

それは本当かもしれません (... 私は完全に確信しているわけではありません...) しかし、これはそれまで例外がスローされないという意味ではありません。考えてみれば、その前にそれはほとんど起こらなければなりません。まだ接続を確立していない場合は、サーバーにデータを書き込んでフラッシュすることはできません!


Eugenioの答えも正しいです。setConnectTimeout(...)接続を試行する前に電話する必要があります。後で設定すると、タイムアウトは無効になります。


だからここに私の実際の問題があります。インターネットに接続していないことをユーザーに伝えたい。そのために私はconnectTimeout(). ただし、タイムアウト例外をスローする代わりに、スローしていMalformedURLExceptionます。

おそらく、DNS ルックアップを実行して URL 内のホスト名を解決できないために、これが発生しています。あるいは(IMOの可能性が高い)、URLの形式が正しくないため、この例外がスローされています...そしてそれはまったく別の問題です。そして、実際の問題が誰かが間違った URL を入力したことである場合、インターネットがダウンしていることをユーザーに伝えたくありません!!

インターネット接続があることをテストしたい場合は、低レベルのことを行う必要があります... いわば; 例えば

  • 既知の IP アドレスを持つホストへのソケット接続を開こうとすると、
  • を使用InetAddress.getByName()して既知の DNS 名を解決しようとする、または
  • このクラスを使用してNetworkInterface、ローカル マシンに「ライブ」ネットワーク インターフェイスがあるかどうかを確認します。

実際には、「インターネットが機能している」と判断することは、効果的なインターネット アクセスを妨げる可能性のある問題をすべて考慮すると、かなり困難です。

于 2012-05-04T11:24:14.090 に答える
1

接続の作成と接続は複数のステップからなるプロセスです。一部のパラメーターは、接続を実行した後は効果がありません。

URLConnection を使用していると仮定すると、既に connect() を呼び出している場合、または接続を暗黙的に実行するメソッドの 1 つを呼び出している場合は、まったく効果がありません。

接続が getOutputStream メソッドで暗黙的に行われた場合、コードの 2 行目で例外がスローされます。

これは、指定された時間内に接続を確立できない場合に java.net.SocketTimeoutException をスローします。接続方法と接続パラメーターの設定の詳細については、こちらをご覧ください

于 2012-05-04T11:26:37.357 に答える
0

この接続時例外がいつスローされるかを知りたい

接続試行がタイムアウトしたときにスローされます。

そして、どのラインがそれを投げますか。

スタック トレースは、どの行がそれをスローしたかを示します。

于 2012-05-04T12:19:27.137 に答える