当前位置:   article > 正文

FTPClient连接FTP服务器_ftpclient fc = new ftpclient(hostip, hostport);

ftpclient fc = new ftpclient(hostip, hostport);

最近项目新需求,需要从服务器上下载文件,然后经过处理与整合,再上传到另一台服务器。
首先要进行ftp的连接,虽然不难,但对于一个菜鸟来说,还是要记录一下啦~
我们使用的是FTPClient进行ftp的连接。对于ftp连接,其实还是遇到了很多问题的, 代码问题不大, 因为基本上就是通过host,port,username,password直接连接即可,(下面要说的主要是在java代码中的操作以及输出,不再举例客户端的情况)。代码如下:

public static void main(String[] args) throws IOException {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

        FTPClient f = new FTPClient();
        f.connect("要连接的ftp地址",端口号);
        f.login("用户名", "密码");
         //这一句很重要!!!下面进行解释
        f.enterLocalPassiveMode();

        //返回登录结果状态
        int reply = f.getReplyCode();
        System.out.println(reply);
        FTPFile[] files = f.listFiles("/");
          for (int i = 0; i < files.length; i++) {
            System.out.println(files[i].getName());
          }
        if (!FTPReply.isPositiveCompletion(reply)) {

         System.out.println(f.list());
         f.disconnect();
         return ;
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

代码比较简单,只是为了简单的ftp连接测试,没有体现出封装性,后续进行代码完善。代码并不难理解,而且网上很多例子,但在操作过程中难免会遇到一些问题,在我多次运行时,不会列出当前目录的列表,ftp返回结果一直是220,就再没有下文,然后经过百度,有的说是环境的问题,有的说是防火墙的问题,当我把防火墙关闭的时候,代码运行正常了,返回230,且打印出了列表。但防火墙关闭也不是个很好的解决办法啊,然后又通过高级设置只允许某固定ip,port可以通过防火墙,但还是不行,后面发现有个很好的解决办法,不需要关闭防火墙,也不需要高级设置,加上了这句:

 f.enterLocalPassiveMode();
  • 1

采用ftp 被动模式 的传输文件协议,这一点很关键。

ftp文件传输协议有两种模式:主动模式和被动模式。

ftp连接过程中,也会出现530等等之类的问题,后查资料了解到ftp返回值详解说明,这里总结一下几个常用的以及经常遇到的返回结果:
220:表示服务就绪,但此时并没有登陆成功(在测试过程中,很多次返回这个状态码,都以为是连接成功了,但一直不会打印出来当前目录的列表,因为这只是刚服务就绪,还没有真正进行连接)
230:连接且登陆成功
530:未登录,登陆错误(用户名或密码错误)
开发过程中我暂时只遇到了这三种返回值的情况,(因为目前只是进行简单的ftp连接),还有很多结果,这里就先不写了,百度上也能搜得到,等遇到问题再来补充。

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/255514
推荐阅读