java与ftp的简单介绍

博主:adminadmin 2023-03-22 12:59:06 686

本篇文章给大家谈谈java与ftp,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

java 连接ftp是主动模式还是被动模式

一.FTP的PORT(主动模式)和PASV(被动模式)

1.

PORT(主动模式)

PORT中文称为主动模式,工作的原理:

FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,客户端随机开放一个端口(1024以上),发送

PORT命令到FTP服务器,告诉服务器客户端采用主动模式并开放端口;FTP服务器收到PORT主动模式命令和端口号后,通过服务器的20端口和客户端开放的端口连接,发送数据.

2.

PASV(被动模式)

PASV是Passive的缩写,中文成为被动模式,工作原理:FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,发送PASV命令到FTP服务器,

服务器在本地随机开放一个端口(1024以上),然后把开放的端口告诉客户端,

客户端再连接到服务器开放的端口进行数据传输。

二.两种模式的比较

从上面的运行原来看到,主动模式和被动模式的不同简单概述为:

主动模式传送数据时是“服务器”连接到“客户端”的端口;被动模式传送数据是“客户端”连接到“服务器”的端口。

主动模式需要客户端必须开放端口给服务器,很多客户端都是在防火墙内,开放端口给FTP服务器访问比较困难。

被动模式只需要服务器端开放端口给客户端连接就行了。

三.不同工作模式的网络设置

实际项目中碰到的问题是,FTP的客户端和服务器分别在不同网络,两个网络之间有至少4层的防火墙,服务器端只开放了21端口,

客户端机器没开放任何端口。FTP客户端连接采用的被动模式,结果客户端能登录成功,但是无法LIST列表和读取数据。很明显,是因为服务器端没开放被动模式下的随机端口导致。

由于被动模式下,服务器端开放的端口随机,但是防火墙要不能全部开放,解决的方案是,在ftp服务器配置被动模式下开放随机端口在

50000-60000之间(范围在ftp服务器软件设置,可以设置任意1024上的端口段),然后在防火墙设置规则,开放服务器端50000-60000之间的端口端。

主动模式下,客户端的FTP软件设置主动模式开放的端口段,在客户端的防火墙开放对应的端口段。

四.如何设置

工作模式

实时上FTP服务器一般都支持主动和被动模式,连接采用何种模式是有FTP客户端软件决定。

Java怎么均衡访问多台ftp服务器

多次需要把文件上传到单独的服务器,而程序是在单独的服务器上部署的,在进行文件操作的时候就需要跨服务器进行操作包括:文件上传、文件下载、文件删除等。跨服务器文件操作一般是需要FTP协议和SFTP协议两种,现在就通过Java实现FTP协议的文件上传。要实现FTP操作文件需要引入jar包: commons-net-1.4.1.jar

参考资料来源:百度贴吧

java如何测试连接ftp是否通

java测试连接ftp是否连通可以使用判断是否有异常来决定,实例如下:

/** 

     * connectServer 

     * 连接ftp服务器 

     * @throws java.io.IOException 

     * @param path 文件夹,空代表根目录 

     * @param password 密码 

     * @param user    登陆用户 

     * @param server 服务器地址 

     */ 

  public void connectServer(String server, String user, String password,  String path) 

  throws IOException 

   { 

     // server:FTP服务器的IP地址;user:登录FTP服务器的用户名 

     // password:登录FTP服务器的用户名的口令;path:FTP服务器上的路径 

      ftpClient = new FtpClient(); 

      ftpClient.openServer(server); 

      ftpClient.login(user, password); 

     //path是ftp服务下主目录的子目录 

     if (path.length() != 0)   ftpClient.cd(path); 

     //用2进制上传、下载 

      ftpClient.binary();      

/** 

     * upload 

     * 上传文件 

     * @throws java.lang.Exception 

     * @return -1 文件不存在 

     *           -2 文件内容为空 

     *           0 成功上传,返回文件的大小 

     * @param newname 上传后的新文件名 

     * @param filename 上传的文件 

     */ 

public long upload(String filename,String newname) throws Exception 

     long result = 0; 

      TelnetOutputStream os = null; 

      FileInputStream is = null; 

     try {          

          java.io.File file_in = new java.io.File(filename); 

         if (!file_in.exists()) return -1; 

         if (file_in.length()==0) return -2; 

          os = ftpClient.put(newname); 

          result = file_in.length(); 

          is = new FileInputStream(file_in); 

         byte[] bytes = new byte[1024]; 

         int c; 

         while ((c = is.read(bytes)) != -1) { 

               os.write(bytes, 0, c); 

          } 

      } finally { 

         if (is != null) { 

              is.close(); 

          } 

         if (os != null) { 

             os.close(); 

          } 

      } 

    return result; 

/** 

     * upload 

     * @throws java.lang.Exception 

     * @return 

     * @param filename 

     */ 

public long upload(String filename) 

throws Exception 

    String newname = ""; 

    if (filename.indexOf("/")-1) 

     { 

        newname = filename.substring(filename.lastIndexOf("/")+1); 

     }else 

     { 

        newname = filename; 

     } 

    return upload(filename,newname); 

/** 

     *   download 

     *   从ftp下载文件到本地 

     * @throws java.lang.Exception 

     * @return 

     * @param newfilename 本地生成的文件名 

     * @param filename 服务器上的文件名 

     */ 

public long download(String filename,String newfilename) 

throws Exception 

{   

    long result = 0; 

     TelnetInputStream is = null; 

     FileOutputStream os = null; 

    try 

     { 

        is = ftpClient.get(filename);        

        java.io.File outfile = new java.io.File(newfilename); 

        os = new FileOutputStream(outfile); 

       byte[] bytes = new byte[1024]; 

       int c; 

       while ((c = is.read(bytes)) != -1) { 

            os.write(bytes, 0, c); 

            result = result + c; 

        } 

     } catch (IOException e) 

     { 

        e.printStackTrace(); 

     } 

    finally { 

         if (is != null) { 

              is.close(); 

          } 

         if (os != null) { 

             os.close(); 

          } 

      } 

     return result; 

/** 

   * 取得某个目录下的所有文件列表 

   * 

   */ 

public List getFileList(String path) 

     List list = new ArrayList(); 

    try 

     { 

        DataInputStream dis = new   DataInputStream(ftpClient.nameList(path)); 

       String filename = ""; 

       while((filename=dis.readLine())!=null)   

        {   

          list.add(filename);         

        }   

    

     } catch (Exception e) 

     { 

        e.printStackTrace(); 

     } 

    return list; 

/** 

     * closeServer 

     * 断开与ftp服务器的链接 

     * @throws java.io.IOException 

     */ 

public void closeServer() 

throws IOException 

{    

   try 

    { 

      if (ftpClient != null) 

       { 

         ftpClient.closeServer();      

       } 

    } catch (IOException e) { 

       e.printStackTrace(); 

    } 

   

  public static void main(String [] args) throws Exception 

   { 

     FtpUtil ftp = new FtpUtil(); 

    try { 

         //连接ftp服务器 

          ("10.163.7.15", "cxl", "1", "info2"); 

         /**   上传文件到 info2 文件夹下 */ 

          System.out.println("filesize:"+("f:/download/Install.exe")+"字节"); 

         /** 取得info2文件夹下的所有文件列表,并下载到 E盘下 */ 

          List list = ("."); 

         for (int i=0;ilist.size();i++) 

          { 

            String filename = (String)list.get(i); 

             System.out.println(filename); 

             (filename,"E:/"+filename); 

          } 

     } catch (Exception e) { 

       /// 

     }finally 

     { 

        ; 

     } 

   }   

}

java与ftp的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、java与ftp的信息别忘了在本站进行查找喔。