了解ftpClient超时时间设置
FTPClient 一共有 6 个设置超时的接口,而不管是文件上传或下载过程,FTP 都会创建两个 Socket,一个用于传输控制命令,一个用于传输文件数据,超时接口和这两个 Socket 之间的关系如下:
setConnectTimeout() 用于设置终端 Socket 与 FTP 服务器建立连接这个过程的超时时间。
setDefaultTimeout() 用于设置终端的传输控制命令的 Socket 的 SoTimeout,即针对传输控制命令的 Socket 的输入流做读取操作时每次陷入阻塞的超时时间。
setSoTimeout() 作用跟上个方法一样,区别仅在于该方法设置的超时会覆盖掉上个方法设置的值。
setDataTimeout() 用于设置终端的传输数据的 Socket 的 Sotimeout,即针对传输文件数据的 Socket 的输入流做读取操作时每次陷入阻塞的超时时间。
setControlKeepAliveTimeout() 用于设置当处于传输数据过程中,按指定的时间阈值定期让传输控制命令的 Socket 发送一个无操作命令 NOOP 给服务器,让它 keep alive。
setControlKeepAliveReplyTimeout():只有调用上个方法后,该方法才能生效,用于设置在传输数据这个过程中,暂时替换掉传输控制命令的 Socket 的 SoTimeout,传输过程结束恢复这个 Socket 原本的 SoTimeout。
来讲讲该怎么用:
针对使用 FTPClient 下载 FTP 文件,一般只需使用两个超时接口,一个是 setConnectTimeout(),用于设置建立连接过程中的超时处理,而另一个则是 setDataTimeout(),用于设置下载 FTP 文件过程中的超时处理。
针对使用 FTPClient 上传文件到 FTP 服务器,建立连接的超时同样需要使用 setConnectTimeout(),但文件上传过程中,建议自行利用 Android 的 Handler 或其他机制实现超时处理,因为 setDataTimeout() 这个设置对上传的过程无效。
另外,使用 setDataTimeout() 时需要注意,这个超时不是指下载文件整个过程的超时处理,而是仅针对终端 Socket 从输入流中,每一次可进行读取操作之前陷入阻塞的超时。
————————————————
原文链接:https://blog.csdn.net/weixin_39906130/article/details/111780314