文档章节

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

t
 tom2016
发布于 2016/04/15 20:04
字数 439
阅读 10
收藏 0

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

实际是因为FTP的两种传输模式:主动模式和被动模式的不同而导致的

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

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

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

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

同样,这只适用于下载的被动传输模式,如果上传的话需要enterRemotePassiveMode()//开启远程被动传输模式


本文转载自:http://blog.csdn.net/tengdazhang770960436/article/details/43794005

共有 人打赏支持
t
粉丝 0
博文 7
码字总数 0
作品 0
杭州
程序员
commons-net上传同一个文件到服务器只有一个能成功

场景是这样的,多个客户有可能同时上传一个大文件到服务器上,如果是这样的话,两个线程只有一个线程能上传,另一个线程就一直在RUNNABLE状态,但是会停在一个方法上,不会超时,用jstack看线...

曾杰
2012/03/29
670
2
不用FTP使用SecureCRT上传下载文件,并解决rz、sz command not found异常

使用SSH终端操作Linux/UNIX时,很多时候需要传一些文件到服务器上,或说从服务器上下载一些文件,这类文件传输动作一般使用FTP即可,但是需要架设FTP Server,每次传输不太方便,还要另外使用...

thinkyoung
2014/12/22
0
0
用commons-net包写Ftp客户端下载(一)

由于需要客户需求,需要把Ftp上的所有文件下载到本地,包括目录和文件。看到文件数量的时候我就哭了。。 几万个文件,晕死。这个地方我遇到的几个困难我会一一说明。 下载commons-net包我就不...

猴子
2011/10/20
0
1
使用java ftpClinet进行多线程下载,并且打印下载进度,结果为什么会超过100%?

最近公司有一个项目,是一个将上平台的节目拷贝到本平台的模式,拷贝程序部署在本平台,通过ftpclient连接到上平台,获取远程文件,然后下载到本机服务器,下载过程中还要记录偏移量算出下载...

route000
2017/06/15
97
1
ftp下载文件文件名乱码问题

package mine.backstage.cms.test; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.text.SimpleDateFormat......

美少女壮士喵
2017/11/15
2
0

没有更多内容

加载失败,请刷新页面

加载更多

你为什么在Redis里读到了本应过期的数据

一个事故的故事 晚上睡的正香突然被电话吵醒,对面是开发焦急的声音:我们的程序在访问redis的时候读到了本应过期的key导致整个业务逻辑出了问题,需要马上解决。 看到这里你可能会想:这是不...

IT--小哥
今天
2
0
祝大家节日快乐,阖家幸福! centos GnuTLS 漏洞

yum update -y gnutls 修复了GnuTLS 漏洞。更新到最新 gnutls.x86_64 0:2.12.23-22.el6 版本

yizhichao
昨天
5
0
Scrapy 1.5.0之选择器

构造选择器 Scrapy选择器是通过文本(Text)或 TextResponse 对象构造的 Selector 类的实例。 它根据输入类型自动选择最佳的解析规则(XML vs HTML): >>> from scrapy.selector import Sele...

Eappo_Geng
昨天
4
0
Windows下Git多账号配置,同一电脑多个ssh-key的管理

Windows下Git多账号配置,同一电脑多个ssh-key的管理   这一篇文章是对上一篇文章《Git-TortoiseGit完整配置流程》的拓展,所以需要对上一篇文章有所了解,当然直接往下看也可以,其中也有...

morpheusWB
昨天
5
0
中秋快乐!!!

HiBlock
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部