gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:22:43 26 4
gpt4 key购买 nike

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

问题来了:下次我尝试再次开始下载过程时,事件 stream:handleEvent: 没有被触发并且 streamStatus 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);
}

以及当流发生某些事情时触发的方法

- (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;
}

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

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

最佳答案

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

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

关于iphone - 如何使用 CFNetwork 在 iOS 上处理互联网连接中断?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9903172/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com