CFNetwork编程1
来源:互联网 发布:淘宝的星期四官换机 编辑:程序博客网 时间:2024/05/16 17:18
学习ASIHTTPRequest的使用,是对apple提供的sdk 中CFNetwork的封装,实现了很多的功能。简单总结CFNetwork编程的基本内容。
包括 CFSocket类,CFStream类,CFHTTP类,CFFTP类。
CFStream:
CFReadStreamOpen(CFReadStreamRef ref);打开一个CFRedStream,就可以对其进行读,写等操作,这些操作会block,会suspend。可以通过在run loop中注册该stream可读、可写事件以及相应的callback函数,实现异步的读写。
CFStream内置支持SSL协议。
例:
CFWriteStreamRef myWriteStream =CFWriteStreamCreateWithFile(kCFAllocatorDefault, fileURL);CFWriteStreamOpen(myWriteStream);CFIndex numBytesRead;UInt8 buf[myReadBufferSize];numBytesRead = CFReadStreamRead(myReadStream, buf, sizeof(buf));CFReadStreamClose(myReadStream);CFRelease(myReadStream);myReadStream = NULL;
实现异步的收发:
CFStreamCreatePairWithSocketToCFHost(kCFAllocatorDefault, host, port, &myReadStream, NULL);//创建连接,myReadStream和指定Host//创建该流的contextCFStreamClientContext myContext = {0, myPtr, myRetain, myRelease, myCopyDesc};
// 注册读写该流相关的事件
CFOptionFlags registeredEvents = kCFStreamEventHasBytesAvailable | kCFStreamEventErrorOccurred | kCFStreamEventEndEncountered;if (CFReadStreamSetClient(myReadStream, registeredEvents, myCallBack, &myContext)){ CFReadStreamScheduleWithRunLoop(myReadStream, CFRunLoopGetCurrent(),kCFRunLoopCommonModes);}// 发起连接,open。。。。
if (!CFReadStreamOpen(myReadStream)) { CFStreamError myErr = CFReadStreamGetError(myReadStream); if (myErr.error != 0) { // An error has occurred. if (myErr.domain == kCFStreamErrorDomainPOSIX) { // Interpret myErr.error as a UNIX errno. strerror(myErr.error); } else if (myErr.domain == kCFStreamErrorDomainMacOSStatus) { OSStatus macError = (OSStatus)myErr.error; } // Check other domains. } else // start the run loop CFRunLoopRun();}
callback的定义
void myCallBack (CFReadStreamRef stream, CFStreamEventType event, void *myPtr) { switch(event) { case kCFStreamEventHasBytesAvailable: ..... UInt8 buf[BUFSIZE]; CFIndex bytesRead = CFReadStreamRead(stream, buf, BUFSIZE);..... break; case kCFStreamEventErrorOccurred: CFStreamError error = CFReadStreamGetError(stream); reportError(error); CFReadStreamUnscheduleFromRunLoop(stream, CFRunLoopGetCurrent(), kCFRunLoopCommonModes); CFReadStreamClose(stream); CFRelease(stream); break; case kCFStreamEventEndEncountered: reportCompletion(); CFReadStreamUnscheduleFromRunLoop(stream, CFRunLoopGetCurrent(), kCFRunLoopCommonModes); CFReadStreamClose(stream); CFRelease(stream); break; }}
还有的方法是POLL,轮询
// 详细可参照
http://developer.apple.com/LIBRARY/IOS/#documentation/Networking/Conceptual/CFNetwork/CFStreamTasks/CFStreamTasks.html#//apple_ref/doc/uid/TP30001132-CH6-DontLinkElementID_12
- CFNetwork编程1
- CFNetwork编程指南(CFNetwork Programming Guide)
- CFNetwork编程指南
- iphone的CFNetwork编程
- iOS网络编程之CFNetwork
- iOS网络编程之CFNetwork
- CFNetwork编程指南(中文版)
- iOS网络编程之CFNetwork
- iOS网络编程之CFNetwork
- CFNetwork
- cfnetwork
- CFNetwork编程指南——CFNetwork Concenpts[译]
- CFNetwork编程指南(一)——CFNetwork概念(CFNetwork Concepts)
- [深入浅出Cocoa]iOS网络编程之CFNetwork
- [深入浅出Cocoa]iOS网络编程之CFNetwork
- [深入浅出Cocoa]iOS网络编程之CFNetwork
- [深入浅出Cocoa]iOS网络编程之CFNetwork
- [深入浅出Cocoa]iOS网络编程之CFNetwork
- Android 创建菜单(menu)的总结
- 怎么样上台演讲(结合ppt)。。超级实用。。。
- 如何在linux的gcc中添加c语言的外部链接库(“比如说,math.h"
- java中hashcode()和equal()方法的使用理解
- javascript中本地对象、内置对象和宿主对象
- CFNetwork编程1
- 曲线谜团75!!!
- Python字符串反转的几种方法
- 自定义Data Service Providers — (1)简介
- 做技术的最终出路!
- c# winform 只允许运行一个实例
- 为什么叫win7
- ExtJS 日期格式转换的三种方式
- linux用户文件解析