如何使用CFNetwork处理iOS上的互联网连接中断?

时间:2012-03-28 07:46:31

标签: iphone objective-c ios cocoa-touch ftp

我在iPhone上实现了一个FTP客户端,但是当从FTP服务器下载时连接中断了一会儿,应用程序通知我没有连接并停止客户端。

问题出现了:下次我尝试重新开始下载过程时,事件stream:handleEvent:未被触发,而streamStatus的{​​{1}}仍停留在networkStream

如果我手动停止下载过程(使用我在连接中断时触发的相同方法),我可以再次重新下载。我必须重新启动下载的整个应用程序再次工作。

以下是代码的关键部分:

NSStreamStatusOpening

以及当流

发生某事时触发的方法
- (void)downloadFile:(NSDictionary *)file {
    NSURL *url;
    CFReadStreamRef ftpStream;
    url = [NSURL URLWithString:[@"PATH TO FTP FILE" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
    [self.fileStream open];
    ftpStream = CFReadStreamCreateWithFTPURL(NULL, (__bridge CFURLRef) url);
    self.networkStream = (__bridge NSInputStream *) ftpStream;
    self.networkStream.delegate = self;
    [self.networkStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    [self.networkStream open];
    CFRelease(ftpStream);
}

我说的问题是在连接中断后,事件不再被触发。

注意:我正在使用带有ARC的iOS 5。

1 个答案:

答案 0 :(得分:2)

也许您应该设置标志以强制流关闭底层本机套接字,默认情况下不会这样做;

[self.networkStream setProperty:(id)kCFBooleanTrue forKey:(NSString *)kCFStreamPropertyShouldCloseNativeSocket];