我在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。
答案 0 :(得分:2)
也许您应该设置标志以强制流关闭底层本机套接字,默认情况下不会这样做;
[self.networkStream setProperty:(id)kCFBooleanTrue forKey:(NSString *)kCFStreamPropertyShouldCloseNativeSocket];