2

後で使用するために作成した小さなテスト プログラムがあり、次のように、サーバーに接続してファイルを取得するだけです。

import org.apache.commons.net.ftp.*;
import java.io.*;
import java.net.SocketException;


public class Test {
     private final String pass = [I removed this password];
        FTPClient ftp;
        File file = new File("download.txt");
        private int reply;
        FileOutputStream dfile;

        public void ftp() {
            try {
                ftp = new FTPClient();
                ftp.connect("ftp.bevilacqua.me");
                ftp.login([i removed this username] ,[I removed this password]);

                reply = ftp.getReplyCode();

                if(FTPReply.isPositiveCompletion(reply)) {
                    System.out.println("Connected Success");
                } else {
                    System.out.println("Connection unsuccessful");
                    ftp.disconnect();
                }

                if(file.exists()) {
                    System.out.println("File already exists");
                } 

                dfile = new FileOutputStream(file);


                ftp.retrieveFile("untitled.txt", dfile); //Untitled does exist in directory '/'
                System.out.println("Success... maybe");


            } catch(SocketException ex) {
                ex.printStackTrace();
            } catch(IOException ex) {
                ex.printStackTrace();
            }


        }

    public static void main(String[] args) {
        Test main = new Test();
        main.ftp();
        try {
            main.ftp.disconnect();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

プログラムは Connected Success と File already exists を出力するため、取得ファイルである必要があります。プログラムはクラッシュせず、例外もスローされません。

4

1 に答える 1

0

私は最初にこれらを試します:

1) パッシブ モード (これは、サーバーではなくクライアントにすべての接続を行うように指示します) ftp.enterLocalPassiveMode();

2) データ タイムアウト (これにより無期限のハングが停止するはずですが、値を短く設定しすぎると、初期の遅い接続を回避できます) シミュレートとテストが困難です。試してみてください。ftp.setDataTimeout(10000);//10 秒

最終的には、protocolMessageHandler を基礎となるソケットに渡す方法があるため、クライアントとサーバーの間のおしゃべりをログに記録できるはずです。私はこれを行ったことはありませんが、本当の問題を明らかにする可能性が高いと思います.

于 2016-09-16T07:01:44.613 に答える