我的問題是:我需要發現如果一個IP和端口正在運行SMTP服務。 爲此,我使用SMTPClient嘗試打開連接。我使用下面的代碼。SMTPClient爲開放端口設置timout
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異常:連接重置
如何爲這種情況設置超時時間?還是存在另一種方式來做我的簡單測試?
'smtp.setDefaultTimeout(timeOut); smtp.setConnectTimeout(timeOut);' 這兩行應該在代碼中? –
setConnectTimeout:設置連接超時(以毫秒爲單位),該時間將傳遞給Socket對象的connect()方法。 setDefaultTimeout:設置打開套接字時使用的默認超時值(以毫秒爲單位)。 –