0

Android 4.03 用のアプリケーションを開発しています。関連するコードは次のとおりです。

public void startConnection() {
    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                Log.i(LOG_TAG, "Beginning");

                _socket = new Socket(_server, _port);
                _socket.setSoTimeout(DEFAULT_SOCKET_TIMEOUT);

                _writer = new BufferedWriter(new OutputStreamWriter(_socket.getOutputStream()));
                _reader = new BufferedReader(new InputStreamReader(_socket.getInputStream()));

                _in = new InputThread(_reader, new InputThreadObserver());
                _in.start();

                Log.i(LOG_TAG, "End");
            } catch (UnknownHostException e) {
                Log.i(LOG_TAG, "UnknownHostException");
            } catch (IOException e) {
                Log.i(LOG_TAG, "IOException");
            }
        }
    }).start();
}

ソケットの作成は新しいスレッドで実行されます。それ以外の場合、実行は数秒間フリーズします。

変数_serverを既存のホスト (たとえばwww.google.com) に設定すると、すべてがうまくいきます。しかし、_server変数を存在しないホスト (たとえばasd.asd) に設定すると、ロガーに "UnknownHostException" が出力されることが本当に期待されます。これは起こりません (ただし、_socket変数は ですnull)。「開始」のみを出力します (「終了」ではありません)。何か案が?

編集:

変数は次のように宣言されます。

private String _server;
private Socket _socket;
private int _port;
private BufferedWriter _writer;
private BufferedReader _reader;
private InputThread _in;

編集:

私はこれを試しています:

public void startConnection() {
    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                Log.i(LOG_TAG, "Beginning");

                _socket = new Socket(_server, _port);

                if (_socket == null)
                    Log.i(LOG_TAG, "NULL SOCKET! (test 1)");                        

            } catch (Exception e) {
                Log.i(LOG_TAG, "EXCEPTION!");
            }

            if (_socket == null)
                Log.i(LOG_TAG, "NULL SOCKET! (test 2)");
        }
    }).start();
}

理由はわかりませんが、出力は次のとおりです。

Beginning

編集:

3分13秒待った後、私はついに得ました:

EXCEPTION!
NULL SOCKET! (test 2)

それは正常ですか?UnknownHostException をすぐにスローすべきではありませんか?

4

1 に答える 1

0

API docsを見ると、_server が文字列の場合、UnknownHost 例外が発生します。それが他の可能性のいずれかである場合、あなたはそうしません。特に、この署名は例外を作成します。

Socket(String host,
          int port)
   throws UnknownHostException,
          IOException
于 2012-05-14T23:15:52.030 に答える