Время соединения сокета не истекло - PullRequest
2 голосов
/ 22 мая 2011

Я пытаюсь установить тайм-аут, когда клиент пытается подключиться к серверу, если сервер не работает, соединение будет ждать 10 секунд, прежде чем выдать исключение тайм-аута.В моем случае код ниже бросает IOException без ожидания, я действительно не понимаю!

public boolean establishConnection()
{
    System.out.println ("Connecting to " +
            this.getServerHostname() + " au port " + this.getServerPort()+ " ...");

    try {

        SocketAddress sockaddr= new InetSocketAddress(_serverHostname, _serverPort);
        _echoSocket = new Socket();
        _echoSocket.connect(sockaddr,10000);
        return _echoSocket.isConnected();


    } catch (UnknownHostException e) {
        System.err.println("Unknown Host: " + this.getServerHostname());
        return false;
    } catch (SocketTimeoutException e) {
        System.err.println("Timeout");
        return false;
    } catch (IOException e) {
        System.err.println("IOException  : " + 
                this.getServerHostname() + ":" + this.getServerPort());
        return false;
    }
}

Ответы [ 2 ]

4 голосов
/ 22 мая 2011

Вы получите тайм-аут, только если ваш запрос на соединение не получен. Если сервер немедленно отклонит его или сервер не существует, вы сразу получите исключение.

0 голосов
/ 22 мая 2011

Но это то, чего вы хотите достичь?
Если ваше намерение состоит в том, что если сервер временно не работает, попробуйте еще раз через 10 секунд, тогда ваш подход неправильный.
Вам следует попытаться установить соединениена сервер, и если вы получите исключение, потому что сервер не работает, вы можете sleep в течение 10 секунд и повторить запрос.
В противном случае Эрнест ответит правильно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...