我真的希望这里有一个例外



我正在为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 吗?

查看 API 文档,如果_server是一个字符串,那么你将得到一个 UnknownHost 异常。 如果是任何其他可能性,你不会。特别是,此签名将创建异常:

Socket(String host,
          int port)
   throws UnknownHostException,
          IOException

相关内容

最新更新