您的位置:首页 > 编程语言 > Java开发

JAVA下FTPClient操作卡死问题分析解决

2017-12-03 23:35 260 查看
    最近在做一个FTP数据下载功能,FTP Server由公司另一个项目组提供,本人开发的时候全是基于内网的,FTP Server并非直接使用提供方的,而是本人自己本地搭建的FTP Server,因此无法完全模拟实际情况。测试环境中程序一切正常,但在部署到生产环境的时候发现FTP操作出现不规律的卡死现象,程序运行到 FTPClient.listFiles()就停止不动,程序捕获不到任务异常,就一直卡着,导致轮训工作瘫痪。

         为了解决这个问题,我对FTPClient设置了ConnectTimeout、DataTimeout、DefaultTimeout,但是在生产环境中问题依旧存在。又经过一翻研究之后发现,FTPClent需要使用被动模式,在调用FTPClient.listFiles()或FTPClient.retrieveFile()这两个方法之前,调用FTPClient.enterLocalPassiveMode();这个方法的意思就是每次数据连接之前,FTPClient告诉FTPServer开通一个端口来传输数据。为什么要这样做呢,因为FTPServer可能每次开启不同的端口来传输数据,但是在linux上,由于安全限制,可能某些端口没有开启,所以就出现阻塞。OK,问题解决。

      
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ftp卡死