- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
以下博客解释了 ftp apache commens net libaray 的不同超时即 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)我们还需要设置连接超时吗?如果我们不设置它,程序会依赖操作系统连接超时吗?
提前致谢:)
最佳答案
这三个方法都在套接字级别触发对 setSoTimeout() 的调用。
setDefaultTimeout() 在连接之前 被调用,并将超时值传递给 socket.setSoTimeout() 用于所有 future 的控制连接。默认为 0,表示无限超时。 FTPClient.setSoTimeout() 在建立连接之后 用于覆盖当前套接字 SO_TIMEOUT 设置,并且仅适用于当前控制连接套接字。
setDataTimeout() 设置读取数据连接的超时时间。查看代码,值 0 本质上是默认值(无限等待)。
如果您想要不同于默认超时(无限)的东西,您只会调用这些方法。
我是通过阅读文档和检查源代码来确定所有这些的,所以如果有人发现我说的有问题,请指正我。
关于java - ftp apache setDefaultimeout() 、 setSoTimeout() 和 setDataTimeout() 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24080678/
FTPClient (commons.net) 上的 setDataTimeout 何时调用?它是在套接字连接挂起时调用还是在达到超时值时调用? 例如。如果我将 setDataTimeout 设置为
以下博客解释了 ftp apache commens net libaray 的不同超时即 setDefaultTimeout()、setSoTimeout()、setDataTimeout()。 h
我是一名优秀的程序员,十分优秀!