ソケットが存在しないサーバーに接続しようとしていますが、なぜ例外が発生するのかわかりません。が発生しています。ここで接続できませんがソケットは例外をスローしません
は私のコードです:
public class TestSocket extends Activity {
private static final String TAG = "TestSocket";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
BasicThread t = new BasicThread();
t.start();
}
class BasicThread extends Thread {
@Override
public void run() {
Log.d(TAG, "Before");
try {
new Socket("42.42.42.42", 12345);
Log.d(TAG, "Connected");
} catch (Exception e) {
Log.d(TAG, "Exception");
}
Log.d(TAG, "After");
}
}
}
何もないので(Wiresharkのを実行している間、私はまた、私自身のIPアドレスを試みたが、私は最初のAndroidに自分のコンピュータから自分のコンピュータ、その後[RST, ACK]
にアンドロイドから[SYN]
を取得しますこのポートで聞いていますが、私はまだAndroidで例外がありません。
また、私は物理的な電話(Nexus S)でテストしています。私はマニフェストでインターネット許可を持っています。
Exception
が届かないのはなぜですか?
編集:
より正確には、私が手に出力され
D/TestSocket(17745): Before
D/TestSocket(17745): Connected
D/TestSocket(17745): After
(とないException
)ソケットコンストラクタで
はい、私はIOExceptionがスローされることを期待していましたが、そうではなく、何もスローされません。 –
私は例外を飲み込むことを期待しています(私はSocketのシミュレートされた置き換えをコーディングした経験があり、コンストラクタは実際には例外処理の混乱です)。引数のないコンストラクタでソケットを作成してから、connectを明示的に呼び出して例外が発生するかどうかを確認することができます。また、コンストラクタの後にソケットの接続状態をチェックしてから、自分のIOExceptionをスローするか、失敗してもかまいません:) –
私は(ジョセフ・アールの答えのコードで)試しましたが、まったく同じ結果があります。 –