iOS:如何减lessFTP连接超时?

我正在使用远程存储数据的iPhone应用程序。 该应用程序仅供我们的客户端使用(无app store),我不允许指定应用程序的上下文。

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

我们的客户告诉我们,有些时候我们需要使用应用程序的地方互联网不可访问或太慢。

已经绘制的解决scheme如下:

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

  2. 如果失败,则尝试从Web服务器下载。

我find了一个叫做FTPManager的真棒图书馆,由Nico Kreipke。 ( 点击这里为它的GitHub )

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

有没有人可以帮助减less这种超时? 也许快速ping到IP? 如果是的话,该怎么做呢?

谢谢你的时间,
蒂亚戈

一些更多的信息

我尝试了一个由Rauru Ferro的答案启发的解决scheme。 但不幸的是,这并没有帮助。 用于testing的代码如下所示:

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

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

尝试使用这个代码(build立一个http httpHethod的HTTP连接,但是是一个初学者):

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

连接到服务器时需要考虑几件事情。 首先要确定的是“我连接到服务器”,第二个是“服务器响应需要多长时间?”。

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

使用高级别类接口(如NSMutableURLRequest)时,可能难以区分连接超时和服务器响应超时。 您可能正在连接到服务器,但服务器陷入困境,响应欢迎消息的速度非常慢。

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

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

希望有所帮助! 迈克尔