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

6
以下博客将解释ftp apache commens net库的不同超时设置,即setDefaultTimeout()、setSoTimeout()和setDataTimeout()。

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

请澄清以下关于上述超时的疑问:
a)setSoTimeout() 只为ftp控制连接设置超时,而不是数据连接吗?
b)setDataTimeout() 只为ftp数据连接设置超时,而不是控制连接吗?(我之所以问这个问题是因为它使用了底层的 java.net.Socket.setSoTimeout())
c)如果我们设置了setDefaultTimeout(),那么我们就不需要使用setSoTimeout()和setDataTimeout()了吗?因为博客中说:“setDefaultTimeout()用于此FTPClient实例中所有使用的连接。”
d)我们还需要设置连接超时吗?如果我们没有设置它,程序会依赖于操作系统的连接超时吗?
提前感谢:)
1个回答

5
这三种方法都会在套接字层面触发setSoTimeout()的调用。
setDefaultTimeout()在连接之前被调用,并将超时值传递给socket.setSoTimeout()以供所有未来的控制连接使用。默认值为0,表示无限超时。FTPClient.setSoTimeout()是在建立连接后作为对当前套接字SO_TIMEOUT设置的覆盖而使用的,仅适用于当前控制连接套接字。
setDataTimeout()设置从数据连接读取的超时时间。从代码上看,0的值本质上是默认值(无限等待)。
只有在想要不同于默认超时时间(无限)的情况下才需要调用这些方法。
我通过阅读文档并检查源代码确定了所有这些内容,所以如果有人发现我的说法有误,请纠正我。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接