【问题标题】:FTPClient hangs up in middle of of transfer and never times outFTPClient 在传输过程中挂断并且永远不会超时
【发布时间】:2014-12-24 00:42:17
【问题描述】:

我有一个简单的 FTP 上传应用程序,通常可以正常工作。

有时在上传过程中我可能会失去 INTERNET(在 wifi 点或其他东西之间移动)。

当发生这种情况时,Upload 会继续尝试上传但没有任何进展,不会超时或导致任何错误,并且由于服务永远不会完成,除非我强制停止应用程序,否则我无法重新启动它。

我如何设置超时选项和任何其他有用的工具来阻止我的应用程序这样做?

我如何实施以下或任何其他措施以及产生什么影响:

client.setConnectTimeout(60); //Are this milliseconds, seconds or what?
client.setDefaultTimeout(300); //Are this milliseconds, seconds or what?
client.setControlKeepAliveTimeout(120); //Are this milliseconds, seconds or what?

这是我的代码的精简版供您查看。

myFTP.class

public class myFTP{
    String ip;
    String user;
    String pass;
    FTPClient client = new FTPClient();

    public myFTP() {
        ip = "someip";
        user = "´someuser";
        pass = "somepass";
        client = new FTPClient();
    }

    public boolean connect() {
        //Define vars
        try{
            //Connect and login
            client.setConnectTimeout(60);
            client.setDefaultTimeout(300);
            client.setControlKeepAliveTimeout(120);
            client.connect(ip);
            client.login(user,pass);

            if(FTPReply.isPositiveCompletion(client.getReplyCode())){
                client.setFileType(FTP.BINARY_FILE_TYPE);
            }else{
                Log.e ("Coneccion FTP", "Fallo");
            }

        } catch (UnknownHostException e) {
            e.printStackTrace();
            return false;
        } catch (SocketException e){
            e.printStackTrace();
            return false;
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

    public boolean upload (String fileName, File file, String dir){

        //Cargo el archivo
        try{
            FileInputStream fis = new FileInputStream(file);
            client.enterLocalPassiveMode();
            Log.e("Subiendo", fileName);
            boolean status = client.storeFile(dir+fileName,fis);
            if (!status){
                fis.close();
                return false;
            }
            fis.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return false;
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
        try {
            client.disconnect();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return true;
    }
}

【问题讨论】:

    标签: android timeout ftp-client


    【解决方案1】:

    我做了一些改变。

    让 FTP 服务器为所有文件连接并保持连接,而不是为每个文件连接和断开连接。

    在经过大量尝试和失败后添加了超时,这似乎有效。

    在警报中,我停止了服务,然后启动了一个新服务。如果服务被挂起,它将重新启动。

    【讨论】:

      猜你喜欢
      • 2018-09-27
      • 2018-09-24
      • 2021-08-05
      • 2018-06-26
      • 2022-01-24
      • 2017-01-21
      • 1970-01-01
      • 1970-01-01
      • 2016-06-14
      相关资源
      最近更新 更多