作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有在 iOS 上使用 CFReadStreamRead 的遗留代码,但如果没有/丢失连接,CFReadStreamRead 将永远阻塞。如何设置 CFReadStreamRead 超时?
提前致谢
最佳答案
@Michael Wildermuth 是的,打开流时出错并已修复。遇到同样问题的人,下面的代码会有所帮助。
NSURL *url = [NSURL URLWithString:@"http://www.google.com"];
CFStreamClientContext dataStreamContext = {0, (__bridge void *)(self), NULL, NULL, NULL};
CFHTTPMessageRef message = CFHTTPMessageCreateRequest(kCFAllocatorDefault, CFSTR("GET"), (__bridge CFURLRef)url, kCFHTTPVersion1_1);
NSString *header;
NSDictionary *requestHeaders = [NSDictionary dictionaryWithObject:@"application/html;charset=UTF-8" forKey:@"Content-Type"];
for (header in requestHeaders) {
CFHTTPMessageSetHeaderFieldValue(message, (__bridge CFStringRef)header, (__bridge CFStringRef)[requestHeaders objectForKey:header]);
}
CFHTTPMessageSetBody(message, (CFDataRef)(CFSTR("")));
CFReadStreamRef readStream = CFReadStreamCreateForHTTPRequest(kCFAllocatorDefault, message);
CFOptionFlags events = kCFStreamEventHasBytesAvailable | kCFStreamEventErrorOccurred | kCFStreamEventEndEncountered;
if(CFReadStreamSetClient(readStream, events, EvenCallBack, &dataStreamContext)){
CFReadStreamScheduleWithRunLoop(readStream, CFRunLoopGetCurrent(), kCFRunLoopCommonModes);
}
CFReadStreamOpen(readStream);
对于回调函数,
void EvenCallBack(CFReadStreamRef readStream, CFStreamEventType type, void *clientCallBackInfo){
if(CFReadStreamHasBytesAvailable(readStream))
{
uint8_t buf[1024];
unsigned int len = 1024;
CFIndex numBytesRead = CFReadStreamRead(readStream, buf, len);
NSMutableData* data = [[NSMutableData alloc] init];
[data appendBytes:&buf length:numBytesRead];
NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"Network read (%d): %@", len, str);
}else {
return;
}
CFHTTPMessageRef message = (CFHTTPMessageRef)CFReadStreamCopyProperty((CFReadStreamRef)readStream, kCFStreamPropertyHTTPResponseHeader);
if (!message) {
NSLog(@"No message");
}
}
谢谢!
关于iphone - 如何在 iOS 中将 CFReadStreamRead 设置为超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11910600/
NB: The entire code base for this project is so large that posting any meaningful amount wold render
有人知道为什么这有时会崩溃吗?我被这个难住了。我猜它在 100 次或类似情况下崩溃了 1 次。 // from header file struct _PTP_IP_Packet_INIT_EVENT
我有在 iOS 上使用 CFReadStreamRead 的遗留代码,但如果没有/丢失连接,CFReadStreamRead 将永远阻塞。如何设置 CFReadStreamRead 超时? 提前致谢
我发现一个问题,其中 CFReadStreamRead 作为流式文件上传的一部分,从不 返回。 这似乎只发生在 iOS7⟩ 上,而且在针对物理设备进行调试时比在模拟器中更频繁 或者至少,它在那里更加明
我是一名优秀的程序员,十分优秀!