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 をすぐにスローすべきではありませんか?