2
我在iPhone上实现了一个FTP客户端,但是当正在进行从FTP服务器下载的连接时,连接中断了一段时间,应用程序通知我没有连接并停止客户端。如何处理使用CFNetwork的iOS上的互联网连接中断?
这里谈到的问题:下一次我尝试再次启动下载过程,事件stream:handleEvent:
不点火,networkStream
住宿的上NSStreamStatusOpening
的streamStatus
。
如果我手动停止下载过程(使用连接中断时触发的相同方法),我可以再次重新下载。我必须重新启动整个应用程序才能再次下载。
这里是代码的关键部分:当事情与流
- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode {
switch (eventCode) {
case NSStreamEventOpenCompleted: {
[self updateStatus:@"Opened connection"];
} break;
case NSStreamEventHasBytesAvailable: {
NSInteger bytesRead;
uint8_t buffer[32768];
bytesRead = [self.networkStream read:buffer maxLength:sizeof(buffer)];
if (bytesRead == -1) {
[self stopReceivingWithStatus:@"Network read error"];
} else if (bytesRead == 0) {
[self stopReceivingWithStatus:nil];
} else {
[self processStreamDataWithBuffer:buffer andReadBytes:bytesRead];
}
} break;
case NSStreamEventHasSpaceAvailable: {
assert(NO);
} break;
case NSStreamEventErrorOccurred: {
[self stopReceivingWithStatus:@"Stream open error"];
} break;
case NSStreamEventEndEncountered: {
} break;
default: {
assert(NO);
} break;
}
的问题发生,因为我说的是被激发
- (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);
}
和方法,经过连接中断,事件不再被解雇。
注:我正在使用iOS 5与ARC。