FTPClient在传输过程中挂起,永远不会超时

时间:2014-12-24 00:42:17

标签: android timeout ftp-client

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

有时在上传过程中,我可能会丢失互联网(在wifi点之间移动)。

当发生这种情况时,上传不断尝试上传但没有进展,没有超时或导致任何错误,因为服务永远不会完成我无法重新启动它,除非我强行停止应用程序。

如何设置超时选项以及任何其他有用的工具阻止我的应用程序执行此操作?

我如何实施以及以下或其他任何效果:

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

1 个答案:

答案 0 :(得分:0)

我做了一些改变。

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

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

在警报中,我停止了服务,然后开始了新服务。如果服务挂断,它将重新开始。