2015-04-22 2 views
1

Моя проблема: мне нужно открыть, если один IP и порт работает с SMTP-службой. Для этого я использую SMTPClient, чтобы попробовать открыть соединение. Я использую код ниже.SMTPClient устанавливает тайм-аут для открытого порта

private static boolean validateSMTP(String ip, int port, int timeOut) { 
    SMTPClient smtp = new SMTPClient(); 

    try { 
     smtp.setConnectTimeout(timeOut);    
     smtp.connect(ip, port); 
     return true; 

    } catch (SocketException e) { 
     LogAplication.Warning("Ops... something wrong", e); 
    } catch (IOException e) { 
     LogAplication.Warning("Ops... something wrong", e); 
    } 
    finally{ 
     smtp = null; 
    } 

    return false; 
} 

Это нормально работает, и я получил ожидаемые результаты, но timeOut был моей проблемой. Например: Если я пытаюсь IP: 127.0.0.1 и порт 80 (IIS открытый порт) Подключать шаг занимает много (гораздо больше, чем определено в тайм-аута), чтобы сгенерировать исключение

java.net.SocketException: Восстановление соединения

Как установить время для этого случая? Или существует другой способ сделать мой простой тест?

ответ

1

После взглянуть на grepCode, я нашел, что это за метод connect(string host, int port):

открывает сокет, подключенный к удаленному хосту на указанный порт и происходящий из указанного локального адреса и порта. До return, _connect Action() вызывается для выполнения операций инициализации .

Поскольку порт открыт другая служба, сокет открыт, не вызывая тайм-аута (по разъему), но исключение брошенный «connectAction()» Так что мне нужно, чтобы установить глобальный таймаут для моих SMTPClient, который используется сокетным соединением и внутри «connectAction()». И я сделал это, чтобы решить мою проблему:

smtp.setDefaultTimeout(timeOut); 

С этим, я теперь имею ожидаемые результаты, открытые порты, которые подбрасывает исключения и, конечно же, успешно подключение к SMTP-услуг.

+0

'smtp.setDefaultTimeout (timeOut); smtp.setConnectTimeout (timeOut); ' Оба эти строки должны быть в коде? –

+1

setConnectTimeout: устанавливает время ожидания соединения в миллисекундах, которое будет передано методу connect() объекта Socket. setDefaultTimeout: устанавливает тайм-аут по умолчанию в миллисекундах для использования при открытии сокета. –

Смежные вопросы