Java 集成Ftp Server踩到的坑
来源:互联网 发布:python离线安装包下载 编辑:程序博客网 时间:2024/06/05 09:10
Java 集成Ftp Server踩到的坑
FTP 协议简单介绍
FTP 本身是基于TCP的,那么肯定会有IP和端口对不对?
回答:是对的
一般默认的Ftp Server默认端口21,这里我单纯的以为他只会用到端口21(怪我之前没有好好扫盲)。
踩到的第一个坑 "防火墙"
当我的FTP server集成完后,防火墙只开放了我监听的7000端口。兴高采列的上测试服务器测试了。
然后在测试服务器用ftp 命令连接了一下,嗯~,非常顺利竟然连接成功,然后防火墙开了7000端口。过了一会发现用别的机器连接好像不行了。这出现了大写的尴尬~。经过反复测试发现关掉防火墙就好了,在这里我还不知道FTP 有个控制端口和连接端口。
简单的说控制端口用来登录的,连接端口是在登录之后使用的,至于使用什么端口要看主动模式和被动模式了。
Mina ftpserver 使用
这个用起来也很简单的
FtpServerFactory serverFactory = new FtpServerFactory();ListenerFactory factory = new ListenerFactory();// set the port of the listener//↓ 就是这这里我一直以为是只会用这一个端口,导到我踩了第一个坑//原来这个只是控制端口,还有个连接端口,默认是使用的20(主动模式),被动模式下使用随机的端口。factory.setPort(2221); // replace the default listenerserverFactory.addListener("default", factory.createListener());// start the serverFtpServer server = serverFactory.createServer(); server.start();
接着说,话说防火墙也被我关了。这下应该没啥事儿,嗯~话说这种情况在局域网(客户端和服务器),真的一点问题都没有。
当我们的客户端程序搬到外网之后,FTP server在内网通过路由器的端口映射
可能有小伙伴看不大明白,弄张图吧:
左边就是我的服务器,这样部署后,发现客户端死活连不上服务器,但是可以登录,尝试过主动模式、被动模式、将所有端口映射还是不起作用。
找文档,找资料。找到了一个可以设备被动模式和主动模式使用的端口如下:
DataConnectionConfigurationFactory dccFactory = new DataConnectionConfigurationFactory();dccFactory.setActiveLocalPort("7001"); //主动模式使用的端口dccFactory.setPassiveIpCheck(true);dccFactory.setPassivePorts("7001-7002"); //被动模式使用的端口范围DataConnectionConfiguration dcc=dccFactory.createDataConnectionConfiguration();factory.setDataConnectionConfiguration(dcc);
到这里算是有一点收获,总算把使用的端口搞明白了。但是还是没解决客户端不能连的问题。
接着找,再仔细的看主动模式和被动模式
主动模式、被动模式
这二个模式都是针对服务器而言
主动模式
当客户端登录服务器成功后,客户端告诉服务器客户端开放的端口,然后服务器主动去连接客户端告诉过来的端口
被动模式
当客户端登录服务器成功后,服务器告诉客户端我开放的端口,然后客户端来连接服务器的端口,相当于是服务器一直是被动的等待连接
到这儿可能有点思路了,确定我的服务器一定是使用被动模式。通过日志发现被动模式使用的IP不对,
DataConnectionConfigurationFactory dccFactory = new DataConnectionConfigurationFactory();dccFactory.setActiveLocalPort(activeLocalPort);dccFactory.setPassiveIpCheck(true);//↓ 就是这个,我的服务器内网IP是192.168.1.10,路由器的ip是另一个。当我没有设置这个选择,当客户端登录成功后//这里默认返回的是192.168.1.10的IP给客户端,客户端当然连接不成功了,因为客户端根本不在我们一个局域网里面。//所以这里我们一般要设置成外网ip(也可以设置域名,这样不用担心ip被变化的问题了)dccFactory.setPassiveExternalAddress(passiveExternalAddress);dccFactory.setPassivePorts(passivePorts);DataConnectionConfiguration dcc=dccFactory.createDataConnectionConfiguration();
好了。到这里问题总算解决了~
- Java 集成Ftp Server踩到的坑
- spring集成Apache ftp server
- Server-U FTP与Mysql数据库集成
- 网页以FTP方式发布到Server的粗略过程
- 用ftp一直put文件到ftp server的压力测试的bat档案的编写
- windows下ftp客户端上传东西到linux下的ftp server中文乱码的问题
- Java开源的FTP Server——Apache FtpServer
- java当中socket使用 Server-U 的ftp 代码指令
- 集成融云的 踩到的坑。。。
- 集成微信sdk踩到的坑
- MySQL Server-id踩到的坑
- 烂泥:Server-U FTP与AD完美集成方案详解
- 烂泥:Server-U FTP与AD完美集成方案详解
- JAVA写文件到FTP的两种方法
- java上传文件到ftp-解决中文乱码的问题
- JAVA写文件到FTP的几种方法
- java上传图片到ftp
- java上传文件到FTP
- 二分查找
- 格式化字符串漏洞利用 七、工具
- 关于ajax请求后js绑定事件失效问题解决方法
- D. Changing a String (编辑距离)(dp+记忆化)(dp后寻找路径大法)
- javascript中提高代码的封装性
- Java 集成Ftp Server踩到的坑
- ACM小学生算术
- 关于Android:layout_weight的真实含义
- 剑指offer题二
- 中文数字转换成阿拉伯数字。
- 257. Binary Tree Paths | 二叉树的路径
- Velocity代码片段
- 札记2
- 浅谈Android源码与设计模式