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

标签 java apache ftp timeout

以下博客解释了 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/

相关文章:

java - 计算小于或等于 N 的两个数对的数量,使得对数的数字和为素数

java - 如何关闭 hbm2ddl?

linux - Apache tomcat : URL based redirection partially works

objective-c - cocoa 错误260

Excel VBA 等待 Shell 完成后再继续脚本

java - 此处配置的 XML 解析器不会阻止或限制外部实体解析

java - 如何制作小程序滚动条?

apache - FastCGI超时错误MAMP Pro 4

java - HTTP 状态 404 – 在 rest api 响应中未找到错误

c - send() 和 put() 混合在一起,(用 C 语言编程 FTP 服务器)