• ios 网络开发(CFNetwork)


    CFNetwork

    存在于CoreFoundation中的一个低级别但高性能的网络框架。BSD套接字的扩展,CFNetwork物理上和理论上都基于BSD套接字。有大量的Cocoa框架依赖于CFNetwork

    CFNetwork更侧重与网络协议,Foundation则更倾向于API数据请求等,虽然框架也提供了一些操作,但是远不如CFNetwork丰富。在学习CFNetwork之前,需要先了解2个基础API框架: CFSocketCFStream

    CFSocket API

    套接字是网络通信的底层,一个套接字类似于电话的插孔,他允许链接到另外一个电话插孔并传输一些信息过去。最常见的套接字是BSD套接字。CFSocket是BSD套接字的一个抽象概念,在很小开销的情况下,几乎提供了全部BSD套接字的功能,并将套接字集成到一个Loop中。并且,CFSocket可以处理任何类型的套接字。

    CFStream API

    读写流,提供一种简单的方法进行媒体数据的交换,与设备无关。你可以为内存中、文件中或者网络中的数据创建流,并且你可以在不把数据加载到内存中的情况下使用流。流是一个字节序列串行传输的通信路径,流是单向的,通常情况下,为了双向通信,需要输入(CFReadStream)、输出流(CFWriteStream)。除了基于文件的流,你不能寻找一个流,一旦数据流被提供或者被消耗,就不能从流中重新取出。

    CFFTP

    CFFTP使与FTP服务器通信更加便利。创建写入流与读取流,使用读写流,你可以进行的操作包括:

    • 从FTP服务器下载文件
    • 上传文件到FTP服务器
    • 获得FTP服务器下目录
    • 创建目录到FTP服务器

    CFHTTP

    发送和接受HTTP消息,CFFTP是FTP协议的抽象,CFHTTP是HTTP协议的抽象。超文本传输协议(HTTP)是一种客户端/服务端的请求/响应协议,客户端创建请求消息,请求消息被序列化,转换为原始字节流,发送字节流到服务器,服务器收到进行反序列化处理并响应。

    要创建一个HTTP请求,需指定一些基础的内容:

    • 请求的方法,比如GET、POST、HEAD等
    • URL 资源定位,比如http://www.apple.com
    • HTTP版本,比如1.0、2.0
    • 消息主题,字节流
    • 消息头

    CFHTTPAuthentication

    完成身份验证。

    CFHost

    获取主机信息,包括名称、地址、可达性信息等。获取信息的过程被称为解析

    所有的CFNetwork、CFHost都兼容IPv4与IPv6,使用CFHost,可以透明的使用代码对IPv4、IPv6进行处理。

    CFNetServices

    如果你想让你的应用使用Bonjour注册一个服务或发现服务可以使用CFNetServices。Bonjour是苹果零配置网络(ZEROCONF)的实现,它允许你发布、发现和解析网络服务。

    CFNetDiagnostics

    连接到网络的应用依赖于一个稳定的链接。如果网络不稳定,这将导致应用程序的问题。采用CFNetDiagnostics API,用户可以自己诊断如下网络问题:

    • 物理连接失败(例如,未插入电缆)
    • 网络故障(例如,DNS或DHCP服务器不再响应)
    • 配置失败(例如,代理配置不正确)
    CFStringRef bodyString = CFSTR("Hello");
        
        CFStringRef headerFieldName = CFSTR("X-My-Favorite-Field");
        CFStringRef headerFieldValue = CFSTR("Dreams");
        
        CFStringRef url = CFSTR("http://www.apple.com");
        CFURLRef myURL = CFURLCreateWithString(kCFAllocatorDefault, url, NULL);
        
        CFStringRef requestMethod = CFSTR("GET");
        CFHTTPMessageRef myRequest =
        CFHTTPMessageCreateRequest(kCFAllocatorDefault, requestMethod, myURL,
                                   kCFHTTPVersion1_1);
        
        CFDataRef bodyDataExt = CFStringCreateExternalRepresentation(kCFAllocatorDefault, bodyString, kCFStringEncodingUTF8, 0);
        CFHTTPMessageSetBody(myRequest, bodyDataExt);
        CFHTTPMessageSetHeaderFieldValue(myRequest, headerFieldName, headerFieldValue);
        CFDataRef mySerializedRequest = CFHTTPMessageCopySerializedMessage(myRequest);
        
        CFRelease(myRequest);
        CFRelease(myURL);
        CFRelease(url);
        CFRelease(mySerializedRequest);
        myRequest = NULL;
        mySerializedRequest = NULL;
    
    
  • 相关阅读:
    Django基础
    Web框架
    JQuery
    16 Javascript
    axios+qs传值序列化时出现数组形式我们该如何修改呢?
    MyBatis 对象中含有对象的查询
    MyBatis 新增获取自增主键的小坑
    List、Set、Map
    事务的隔离级别
    mybatis配置中文参考文档
  • 原文地址:https://www.cnblogs.com/guchengfengyun/p/8137214.html
Copyright © 2020-2023  润新知