Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java FTP Apache Commons在retrieveFile上暂停_Java_Apache_Ftp_Apache Commons - Fatal编程技术网

Java FTP Apache Commons在retrieveFile上暂停

Java FTP Apache Commons在retrieveFile上暂停,java,apache,ftp,apache-commons,Java,Apache,Ftp,Apache Commons,我创建了一个小测试程序供以后使用,它只需连接到服务器并检索一个文件,如下所示: 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

我创建了一个小测试程序供以后使用,它只需连接到服务器并检索一个文件,如下所示:

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();
        }
    }

}

程序打印连接成功,并且文件已经存在,因此它必须是检索文件。程序不会崩溃,也不会引发异常。

我会先尝试以下方法:

1) 被动模式(指示客户端进行所有连接,而不是服务器) ftp.enterLocalPassiveMode()

2) 数据超时(这将停止不确定的挂起,但如果您将该值设置得太短,则可能会退出早期的慢速连接)很难进行模拟和测试-请尝试一下。 ftp.setDataTimeout(10000)//十秒钟

最终,有一种方法可以将protocolMessageHandler传递给底层套接字,这样您就可以记录客户端和服务器之间的聊天。虽然我从来没有这样做过,但我想这很有可能揭示真正的问题