下面的博客解释了ftp apache comments net库的不同超时,即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)我们还需要设置连接超时吗?如果我们不设置它,程序会依赖于操作系统连接超时吗?
提前感谢:)
这三个方法都在套接字级别触发对setSoTimeout()的调用。
setDefaultTimeout()在连接之前被调用,并将超时间值传递给socket.setSoTimeout()用于所有未来的控制连接。默认值为0,表示无限超时。FTPClient.setSoTimeout()在连接建立之后使用作为对当前套接字SO_TIMEOUT设置的覆盖,并且仅适用于当前控制连接套接字。
setDataTimeout()设置从数据连接读取的超时时间。查看代码,0实际上是默认值(无限等待)。
只有当你想要不同于默认超时(infinite)时,你才需要调用这些方法。
我通过阅读文档和检查源代码确定了所有这些,所以如果有人看到我说的有问题,请纠正我。