了解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

posted on 2022-09-15 10:52  qqq9527  阅读(2581)  评论(0编辑  收藏  举报

导航