iOS:如何减少FTP连接超时?

时间:2013-10-10 10:09:29

标签: iphone ios ftp

我正在开发一款使用远程存储数据的iPhone应用程序。该应用程序仅供我们的客户使用(没有应用程序商店),我不允许指定应用程序的上下文。

我可以告诉你的唯一情况是该应用程序允许输入代码,并下载与该代码相关的数据。

我们的客户告诉我们,有些时候我们需要在互联网无法访问或太慢的地方使用该应用。

已经绘制的解决方案如下:

  1. 我们将尝试在本地FTP服务器上下载数据,该服务器实际上只是一个共享目录的路由器,其代码为其名称,可通过已知IP访问(例如ftp://192.168.1.1/some-path

  2. 如果失败,它会尝试从网络服务器下载。

  3. 我找到了一个名叫FTPManager的棒子库,由Nico Kreipke提供。 (click here for its GitHub

    不幸的是,当FTP地址不可用时,超时大约需要一分钟,然后转到第二步。

    是否有人可以帮助减少此超时?也许快速ping到IP?如果是的话,该怎么做?

    感谢您的时间,
    蒂亚戈

    更多信息

    我尝试过一种灵感来自Rauru Ferro答案的解决方案。但不幸的是它没有帮助。 用于测试的代码如下:

    NSString *ftp = [NSString stringWithFormat:@"ftp://user:password@%@/sda1/%@", ip, code];
    NSURL *url = [NSURL URLWithString:ftp];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:60.0];
    NSURLResponse *response = nil;
    NSError *error = nil;
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
    

    我尝试了几个超时值,但无济于事。它总是以超时错误结束。但是,下载代码能够从路由器的共享目录下载数据(使用相同的凭据)。

2 个答案:

答案 0 :(得分:0)

尝试使用此代码(使用POST httpMethod为http连接构建,但是是一个初学者):

NSURL *url = [NSURL URLWithString:yourURL];
NSMutableURLRequest *request = [NSMutableURLRequest
                                 requestWithURL:url
                                 cachePolicy:NSURLRequestReloadIgnoringCacheData
                                 timeoutInterval:20.0];
[request setHTTPMethod:@"POST"];

答案 1 :(得分:0)

连接服务器时需要考虑一些事项。要确定的第一件事是“我是否连接到服务器”,第二件事是“服务器响应需要多长时间?”。

使用FTP,首先对服务器进行低级别tcp / ip连接,然后服务器将以初始2xx级别欢迎/ Hello消息进行响应。

使用NSMutableURLRequest等高级类接口时,可能很难区分连接超时和服务器响应超时。您可能正在连接到服务器,但服务器陷入困境,只是很慢,无法响应欢迎消息。

我的建议是进入低级别并使用通用BSD套接字对象,创建套接字然后连接到服务器。您还可以使用低级别的setsockopt()调用来限制connect()调用等待连接的时间。使用FTP,您还可以选择执行recv()以从服务器检索欢迎消息。您可以在此调用上设置不同的超时,以确保服务器及时响应。

稍微高一点的时候,CFSocket类会给你更多来自BSD层的封装,但你仍然应该能够突破连接时间和初始响应时间之间的差异。

希望有所帮助! 迈克尔