Ftp鏈接問題

  下載功能用的是sun.net.ftp.FtpClient,遇到了一個問題,鏈接老是報:TYPE I:530 Please login with USER and PASS.git

  代碼是:github

public void connect(String ip, int port, String user, String password, String path) {
        try {
             ftpClient =FtpClient.create();
             ftpClient.connect(new InetSocketAddress(ip, port));
//            ftpClient = FtpClient.create(new InetSocketAddress(ip, port));
            ftpClient.login(user, null, password);
            ftpClient.setBinaryType();
            System.out.println("login success!");
            
            if (path.length() != 0) {
                ftpClient.changeDirectory(path);
            }
            ftpClient.setBinaryType();
        } catch (IOException ex) {
            ex.printStackTrace();
            throw new RuntimeException(ex);
        } catch (FtpProtocolException e) {
            e.printStackTrace();
        }
    }

  先百度了下,發現這個版本都是這種寫法,無奈只好看login的代碼:數組

public void connectServer(String ip, int port, String user, String password, String path) {
        try {
             ftpClient =FtpClient.create();
             ftpClient.connect(new InetSocketAddress(ip, port));
//            ftpClient = FtpClient.create(new InetSocketAddress(ip, port));
            ftpClient.login(user, null, password);
            // 設置成2進制傳輸
            ftpClient.setBinaryType();
            System.out.println("login success!");
            
            if (path.length() != 0) {
                // 把遠程系統上的目錄切換到參數path所指定的目錄
                ftpClient.changeDirectory(path);
            }
            ftpClient.setBinaryType();
        } catch (IOException ex) {
            ex.printStackTrace();
            throw new RuntimeException(ex);
        } catch (FtpProtocolException e) {
            e.printStackTrace();
        }
    }

  看到this.tryLogin(var1, var2)就發現了。。。,爲了確認看一下它的代碼:微信

    private void tryLogin(String var1, char[] var2) throws FtpProtocolException, IOException {
        this.issueCommandCheck("USER " + var1);
        if(this.lastReplyCode == FtpReplyCode.NEED_PASSWORD && var2 != null && var2.length > 0) {
            this.issueCommandCheck("PASS " + String.valueOf(var2));
        }

    }

  原來第二個char數組纔是密碼。。。,因而改爲:this

            ftpClient.login(user, password.toCharArray());

  我就不應百度,就是偷了一下懶。。。spa

  另外,有一點要注意若是用的是ftpClient.setBinaryType()返回的類型是SocketInputStream類型,而ftpClient.setAsciiType()返回的是TelnetInputStream,不對應是會報錯的,或者乾脆就InputStream也是能夠的。。。.net

 

 

==========================================================code

咱最近用的github:https://github.com/saaavsaaablog

微信公衆號:ip

                      

相關文章
相關標籤/搜索