java--ftp获取文件列表时卡死/无反应/程序无异常,问题解决
1起初有一个应用,在经典网络服务器A,拉取ftp文件的,运行正常,然后A服务器 马上就要过期了,因公司管理需要,需要新申请vpc网络服务器B,然后我开始着手应用迁移的工作
然后问题就出现了,应用迁移至新的服务器B之后, 程序执行到
FTPFile[] ftpFiles = ftpClient.listFiles(); 时 后续就没有任何响应了 也没有报错
经过请教得到解决问题方法如下
1在服务器B执行linux命令连接ftp尝试网络连接是否正常 ftp ftp.***.com 登录用户名 和密码
使用ls 命令发现是可以获取文件列表的 ,如果出现错误 说明新服务器未被ftp服务器允许白名单 排除此问题
2在服务器B 程序未执行之前 先在服务器B执行 监控网络和端口的命令 tcpdump port 21 -X //21为ftp的端口
此时进入监控状态,开始启动程序
下面后陆续出现 初始化连接ftp的 一些数据 然后执行到获取列表时出现了一下错误
意思为获取 ACC文件夹列表失败 此时问题找到,
如何解决呢 我们再打开一个lunix窗口
连接到ftp 执行 登录后 执行 ls命令获取列表 ,此时返回前一个 监控端口的窗口 发现信息如下
PASV 切换到了被动模式后可以获取成功
ftp-主动模式(PORT)和被动模式(PASV)
看了代码 没有设置主动或被动模式 然后加上代码后
增加以下代码
ftpClient.enterLocalPassiveMode();
再次启动服务器B的应用 成功获取文件列表,程序执行正常
至于主动模式和被动模式的区别在这里就不阐述了,有兴趣了解的可以百度资料