本文介绍: apache有个开源库: commons–net,这个开源库中包括了各种基础的网络工具类,我使用了这个开源库中的FTP工具。但碰到一些问题,并不是说是开源库的 bug,可能锅得算在产品头上吧,各种奇怪需求。问题当将网络限速成1KB/S时,使用commons-net开源库中的FTPClient 上传本地文件到FTP服务器上,FTPClient源码内部是通过Socket 来实现传输的,当终端和服务器建立了连接,调用storeFile()开始上传文件时,由于网络限速问题,一直没有接收到是否传输结束的反馈
apache有个开源库: commons-net,这个开源库中包括了各种基础的网络工具类,我使用了这个开源库中的FTP工具。
但碰到一些问题,并不是说是开源库的 bug,可能锅得算在产品头上吧,各种奇怪需求。
问题
当将网络限速成1KB/S时,使用commons-net开源库中的FTPClient 上传本地文件到FTP服务器上,FTPClient源码内部是通过Socket 来实现传输的,当终端和服务器建立了连接,调用storeFile()开始上传文件时,由于网络限速问题,一直没有接收到是否传输结束的反馈,导致此时,当前线程一直卡在storeFile(),后续代码一直无法执行。
如果这个时候去FTP服务器上查看一下,会发现,新创建了一个OKB的文件,但本地文件中的数据内容就是没有上传上来。
产品要求,需要有个超时处理,比如上传工作超过了30s就当做上传失败,超时处理。但我明明调用了FTPClient的相关超时设置接口,就是没有一个会生效。
—句话简述下上述的场景问题:
网络限速时,为何 FTPClient 设置了超时时间,但文件上传过程中超时机制却一直没生效?
一气之下,干脆跟进FTPClient源码内部,看看为何设置的超时失效了,没有起作用。
所以,本篇也就是梳理下FTPClient 中相关超时接口的含义,以及如何处理上述场景中的超时功能。
源码跟进
先来讲讲对FTPClient的浅入学习过程吧,如果不感兴趣,直接跳过该节,看后续小节的结论就可以了。
ps:本篇所使用的commons-net开源库版本为3.6
使用
首先,先来看看,使用FTPClient上传文件到FTP服务器大概需要哪些步骤:
跟进
结论
常见异常
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。