解决FTPClient linux 下载文件小于实际文件,线程挂起等问题

FTPClient调用retrieveFileStream致使线程挂起(防火墙问题);下载文件小于实际文件问题解决linux

实际是由于FTP的两种传输模式:主动模式和被动模式的不一样而致使的安全

FTPClient.listFiles()或者FTPClient.retrieveFile()方法时,就中止在那里,什么反应都没有,出现假死状态。google一把,发现不少人也出现了此类问题,最终在一个帖子里找到了解决办法。在调用这两个方法以前,调用FTPClient.enterLocalPassiveMode();这个方法的意思就是每次数据链接以前,ftp client告诉ftp server开通一个端口来传输数据。为何要这样作呢,由于ftp server可能每次开启不一样的端口来传输数据,可是在linux上,因为安全限制,可能某些端口没有开启,因此就出现阻塞。测试

最近由于项目须要,研究有关ftp的相关东西。结果发现一个问题。一样的程序在不一样的机器上运行,结果有一个直接致使线程挂起,另一个运行却正常。通过反复的测试最后发现,线程挂起的那台机器装有防火墙,致使调用retrieveFileStream方法时直接线程挂起。google

通过网上一大堆的查找终于找到解决方法:spa

ftpClient.enterLocalPassiveMode(); //开启本地被动模式
设置FTPClient为被动传输模式便可解决线程挂起问题。此代码设置在登录以后或者以前均可以。线程

一样,这只适用于下载的被动传输模式,若是上传的话须要enterRemotePassiveMode()//开启远程被动传输模式orm

相关文章
相关标签/搜索