AbstractFtpSessionFactory 中的所有这些属性都向下传播到 FTPClient:
if (this.connectTimeout != null) {
client.setConnectTimeout(this.connectTimeout);
}
if (this.defaultTimeout != null) {
client.setDefaultTimeout(this.defaultTimeout);
}
if (this.dataTimeout != null) {
client.setDataTimeout(this.dataTimeout);
}
connectTimeout 的默认值为 private static final int DEFAULT_CONNECT_TIMEOUT = 60000;。所以,错过它是可以的。是的,这个是我们在通过connect()创建Socket时使用的:_socket_.connect(new InetSocketAddress(host, port), connectTimeout);
defaultTimeout 向下传播到 _socket_.setSoTimeout(_timeout_);,这对套接字读取操作有影响。请参阅Socket.setSoTimeout()JavaDocs。是的,它的默认值是0。所以,也可以错过它的配置。
dataTimeout 用于在 ACTIVE_LOCAL_DATA_CONNECTION_MODE 中创建的服务器 Socket 用于类似的 setSoTimeout() 选项。默认值相同:0 - 无限等待读取操作应答。
我从 Apache Commons Net 源代码中获得了所有这些。
看起来这个项目本身并没有提供一些关于这个问题的文档:https://commons.apache.org/proper/commons-net/
所以,是的,一条经验法则:始终使用合理的值配置这些道具。