gpt4 book ai didi

java - SMTPClient 设置开放端口的超时

转载 作者:行者123 更新时间:2023-11-30 08:14:56 47 4
gpt4 key购买 nike

我的问题是:我需要发现一个 IP 和端口是否正在运行 SMTP 服务。为此,我使用 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;
}

它工作正常,我已经得到了预期的结果,但超时一直是我的问题。例如:如果我尝试 ip: 127.0.0.1 和端口 80(IIS 开放端口),连接步骤需要很长时间(比超时中定义的时间长得多)才能引发异常

java.net.SocketException: Connection reset

在这种情况下如何设置超时?或者存在另一种方法来进行我的简单测试?

最佳答案

查看后grepCode ,我发现这个方法 connect(string host, int port) :

Opens a Socket connected to a remote host at the specified port and originating from the specified local address and port. Before returning, _connect Action() is called to perform connection initialization actions.

当端口被另一个服务打开时,套接字被打开,不会导致超时(通过套接字),但“connectAction()”抛出异常因此,我需要为 SMTPClient 设置一个全局超时,该超时由套接字连接和“connectAction()”内部使用。我这样做是为了解决我的问题:

smtp.setDefaultTimeout(timeOut);

有了这个,现在我已经得到了预期的结果,打开抛出异常的端口,当然还有成功连接 SMTP 服务。

关于java - SMTPClient 设置开放端口的超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29799063/

47 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com