在项目中使用commons-net-3.0.1.jar实现FTP文件的下载,在windows xp上运行正常,但是放到linux上,却出现问题,程序运行到
FTPClient.listFiles()或者FTPClient.retrieveFile()方法时,就停止在那里,什么反应都没有,出现假死状态。google一把,发现很多人也出现了此类问题,最终在一个帖子里找到了解决办法。在调用这两个方法之前,调用FTPClient.enterLocalPassiveMode();这个方法的意思就是每次数据连接之前,ftp client告诉ftp server开通一个端口来传输数据。为什么要这样做呢,因为ftp server可能每次开启不同的端口来传输数据,但是在linux上,由于安全限制,可能某些端口没有开启,所以就出现阻塞。OK,问题解决。
另外,如果程序部署在weblogic上, 也有可能出现一些问题,为什么,因为weblogic自己也有commons-net包,如果weblogic的jar包版本低于你使用的版本,就设置weblogic 的classpath,优先加载工程里的jar包。
问题的根源:
出现该问题的根源还是对ftp传输的两种模式理解不够清楚,下面介绍一下ftp的两种传输模式
FTP是有两种传输的模式的,主动模式和被动模式,之前一直没怎么去搞明白之,现在找了下资料,重新整理了下:
一个完整的FTP文件传输需要建立两种类型的连接,一种为文件传输下命令,称为控制连接,另一种实现真正的文件传输,称为数据连接。
1) 控制连接
客户端希望与FTP服务器建立上传下载的数据传输时,它首先向服务器的TCP 21端口发起一个建立连接的请求,FTP服务器接受来自客户端的请求,完成连接的建立过程,这样的连接就称为FTP控制连接。
2) 数据连接
FTP控制连接建立之后,即可开始传输文件,传输文件的连接称为FTP数据连接。FTP数据连接就是FTP传输数据的过程,它有两种传输模式
PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用PORT命令告诉服务器:“我打开了XXXX端口,你过来连接我”。于是服务器从20端口向客户端的XXXX端口发送连接请求,建立一条数据链路来传送数据。
PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用PASV命令告诉客户端:“我打开了XXXX端口,你过来连接我”。于是客户端向服务器的XXXX端口发送连接请求,建立一条数据链路来传送数据。
分享一个链接:
http://www.myexception.cn/apache/678705.html
相关推荐
ftp文件传输ftp文件传输
ftp传输源码ftp传输源码ftp传输源码ftp传输源码ftp传输源码
基于openssl的ftp文件传输系统源码基于openssl的ftp文件传输系统源码基于openssl的ftp文件传输系统源码基于openssl的ftp文件传输系统源码基于openssl的ftp文件传输系统源码基于openssl的ftp文件传输系统源码基于...
ftp网络链接传输工具,解压即可使用,相信了解的应该知道如何使用,我就不再赘述了
一个类似于玩具的东西,初学者可以学到基本的原理
FTP测试备份
这个ftp数据传输类封装了ftp打开,链接,及上传下载功能
FTP文件传输,局域网即可快速传输,高效、安全、可靠地进行文件传输并组织和管理文件型数据,助力企业用户应对大数据传输和云计算时代的新挑战,提升企业的运营效率和商业价值。内置高性能文件传输技术,大数据快速...
数据传输系统,支持共享目录以及ftp数据的采集和分发.zip数据传输系统,支持共享目录以及ftp数据的采集和分发.zip数据传输系统,支持共享目录以及ftp数据的采集和分发.zip数据传输系统,支持共享目录以及ftp数据的...
CuteFTP,FTP数据传输(数据上传和数据下载)神器 功能概述:客户端和服务器之间通过FTP进行文件传输。 适用人群:通过FTP进行数据传输的业务需求。 尤其适用于通过以太网进行客户端和服务器之间进行文件上传和文件...
Windows-ZYJ网线直连FTP传输数据.pdf
使用VC++实现的FTP文件传输程序
能够实现客户端的FTP文件传输协议 java程序设计语言
FTP 文件传输协议 入门可以看一下,谢谢
实现FTP文件传输
FTP unix下put & windows下bat批处理get总结 有验证通过的实例
FTP文件传输源代码,pb8.0测试通过
WS_FTP Pro,一款功能强大的ftp文件传输工具,采用灵活的传输协议,主要用于文件的上传、下载、浏览和管理等操作 ABB机器人文件传输软件,传输文件通过FTP,SSL,SSH和HTTP / S的传输协议。
用Unity做的Android应用,基于C#的FTP文件传输Demo。工程可直接打包APK安装在两个安卓设备上,一个作为服务端,另一个作为接收端。已测试。如有疑问,请留言
windows系统ftp文件传输工具