ftp apache setDefaultimeout() 、 setSoTimeout() 和 setDataTimeout() 之间的区别

Mic*_*man 5 java apache ftp timeout

以下博客解释了 ftp apache commens net libaray 的不同超时,即 setDefaultTimeout()、setSoTimeout()、setDataTimeout()。

http://sudhirvn.blogspot.in/2007/05/ftpclient-timeout-values.html

但是请澄清我的以下疑问 WRT 上述超时?

a) setSoTimeout() 是否仅为 ftp 控制连接而不是数据连接设置超时?

b) setDataTimeout() 是否仅为 ftp 数据连接而不是控制连接设置超时?(我问这个是因为它使用底层 java.net.Socket.setSoTimeout() )

c) 如果我们设置 setDefaultTimeout() ,那么我们就不需要设置/使用 setSoTimeout() 和 setDataTimeout() ?因为博客说'setDefaultTimeout() 默认用于使用这个 FTPClient 实例建立的所有连接。

d)我们还需要设置连接超时吗?如果我们不设置它,程序会依赖操作系统连接超时吗?

提前致谢 :)

Sea*_* N. 5

这三个方法都在套接字级别触发对 setSoTimeout() 的调用。

setDefaultTimeout()连接之前被调用,并将超时值传递给 socket.setSoTimeout() 以用于所有未来的控制连接。默认值为 0,表示无限超时。FTPClient.setSoTimeout()建立连接用作当前套接字 SO_TIMEOUT 设置的覆盖,并且仅适用于当前控制连接套接字。

setDataTimeout() 设置从数据连接读取的超时时间。查看代码,值 0 本质上是默认值(无限等待)。

如果您想要与默认超时(无限)不同的东西,您只会想要调用这些方法。

我通过阅读文档和检查源代码确定了这一切,所以如果有人发现我说的有问题,请纠正我。