iOS开发之CFNetwork框架使用(二)

简介: iOS开发之CFNetwork框架使用

六、进行FTP协议的数据交换


   CFNetWork框架也支持与FTP协议的服务端进行数据交互,方法解析如下:


//根据URL创建FTP读取流对象 用来进行文件下载

CFReadStreamRef CFReadStreamCreateWithFTPURL(CFAllocatorRef __nullable alloc, CFURLRef ftpURL);

//解析文件或目录的格式化数据

CFIndex CFFTPCreateParsedResourceListing(CFAllocatorRef __nullable alloc, const UInt8 *buffer, CFIndex bufferLength, CFDictionaryRef __nullable *  __nullable parsed);

//根据URL创建一个FTP写入流对象 用来进行文件上传

CFWriteStreamRef CFWriteStreamCreateWithFTPURL(CFAllocatorRef __nullable alloc, CFURLRef ftpURL);

对于FTP写入和读取流来说,可以使用CFReadStreamSetProperty()函数或者CFWriteStreamSetProperty()函数来进行属性的设置,可设置的属性列举如下:


kCFStreamPropertyFTPUserName //设置用户名

kCFStreamPropertyFTPPassword //设置密码

kCFStreamPropertyFTPUsePassiveMode //布尔值  设置是否被动模式

kCFStreamPropertyFTPResourceSize  //资源大小

kCFStreamPropertyFTPFileTransferOffset //记录文件位置 用来断点续传

kCFStreamPropertyFTPAttemptPersistentConnection //是否重用连接

kCFStreamPropertyFTPProxy  //设置代理字典

kCFStreamPropertyFTPFetchResourceInfo //资源详情字典

//下面为代理字典中可以定义的键

kCFStreamPropertyFTPProxyHost  //代理主机

kCFStreamPropertyFTPProxyPort  //代理端口

kCFStreamPropertyFTPProxyUser  //代理用户名

kCFStreamPropertyFTPProxyPassword //代理密码

//下面是资源详情字典中可以定义的键

kCFFTPResourceMode  //资源模式

kCFFTPResourceName //资源名

kCFFTPResourceOwne //资源所有者

kCFFTPResourceGroup //资源组

kCFFTPResourceLink  //资源链接

kCFFTPResourceSize  //资源尺寸

kCFFTPResourceType  //资源类型

kCFFTPResourceModDate //修改时间

七、主机地址相关操作


   CFNetWork中也封装了与主机地址域名相关的操作方法,例如,我们可以通过域名进行DNS解析出IP地址,示例代码如下:


#import <netinet/in.h>

#import <arpa/inet.h>

CFStringRef hostString = CFSTR("www.baidu.com");

CFHostRef host = CFHostCreateWithName(CFAllocatorGetDefault(), hostString);

CFHostStartInfoResolution(host, kCFHostAddresses, NULL);

CFArrayRef addresses = CFHostGetAddressing(host, NULL);

for (int i = 0; i<CFArrayGetCount(addresses); i++) {

   struct sockaddr_in * ip;

   ip = (struct sockaddr_in *)CFDataGetBytePtr(CFArrayGetValueAtIndex(addresses, i));

   printf("%s\n",inet_ntoa(ip->sin_addr));

}

CFHostRef对象操作相关方法解析如下:


//获取类型ID

CFTypeID CFHostGetTypeID(void);

//根据域名创建CFHostRef对象

CFHostRef CFHostCreateWithName(CFAllocatorRef __nullable allocator, CFStringRef hostname);

/*

根据地址创建CFHostRef对象

addr参数为sockaddr结构体数据

*/

CFHostRef CFHostCreateWithAddress(CFAllocatorRef __nullable allocator, CFDataRef addr);

//CFHostRef对象的复制

CFHostRef CFHostCreateCopy(CFAllocatorRef __nullable alloc, CFHostRef host);

//对指定主机进行信息预查找 返回值标明是否查找成功

Boolean CFHostStartInfoResolution(CFHostRef theHost, CFHostInfoType info, CFStreamError * __nullable error);

//获取主机的地址列表 数组中为sockaddr结构体数据

CFArrayRef CFHostGetAddressing(CFHostRef theHost, Boolean * __nullable hasBeenResolved);

//获取主机名列表

CFArrayRef CFHostGetNames(CFHostRef theHost, Boolean * __nullable hasBeenResolved);

//获取主机可达性信息

CFDataRef CFHostGetReachability(CFHostRef theHost, Boolean * __nullable hasBeenResolved);

//取消未完成的解析

/*

解析类型枚举

typedef CF_ENUM(int, CFHostInfoType) {

 //地址

 kCFHostAddresses     = 0,

 //主机名

 kCFHostNames      = 1,

 //可达性信息

 kCFHostReachability     = 2

};

*/

void CFHostCancelInfoResolution(CFHostRef theHost, CFHostInfoType info);

//设置客户端回调

Boolean CFHostSetClient(CFHostRef theHost, CFHostClientCallBack __nullable clientCB, CFHostClientContext * __nullable clientContext);

//注册进Runloop

void CFHostScheduleWithRunLoop(CFHostRef theHost, CFRunLoopRef runLoop, CFStringRef runLoopMode);

//从Runloop中注销

void CFHostUnscheduleFromRunLoop(CFHostRef theHost, CFRunLoopRef runLoop, CFStringRef runLoopMode);

八、后续


   上面介绍的内容更多还是关于使用CFNetWork框架进行HTTP或FTP请求的相关方法,其实CFNetWork框架中还提供了复杂的Bonjour服务功能,其与CFNetService相关,这部分内容后面有时间再进行整理总结吧。

目录
相关文章
|
1月前
|
算法 计算机视觉 iOS开发
iOS 实时图像处理技术:Core Image 框架的应用
【4月更文挑战第8天】 在移动设备上实现高效的图像处理功能,对于提升用户体验和扩展应用程序能力至关重要。苹果公司的iOS平台提供了强大的Core Image框架,它允许开发者以高效和直观的方式执行复杂的图像处理任务。本文将深入探讨Core Image框架的关键特性,并通过实例演示如何在iOS应用中集成实时图像处理功能,不仅提高性能,同时保持了电池寿命的优化。我们将重点讨论面部识别、滤镜应用和性能优化等关键技术点,为读者提供一份全面的iOS图像处理指南。
|
2月前
|
API 数据安全/隐私保护 iOS开发
利用uni-app 开发的iOS app 发布到App Store全流程
利用uni-app 开发的iOS app 发布到App Store全流程
106 3
|
4月前
|
存储 iOS开发
iOS 开发,如何进行应用的本地化(Localization)?
iOS 开发,如何进行应用的本地化(Localization)?
123 2
|
4月前
|
机器学习/深度学习 PyTorch TensorFlow
是否有其他框架可以在iOS设备上进行机器学习?
是否有其他框架可以在iOS设备上进行机器学习?
21 1
|
4月前
|
存储 数据建模 iOS开发
iOS设备功能和框架: 什么是 Core Data,它在 iOS 中的作用是什么?
iOS设备功能和框架: 什么是 Core Data,它在 iOS 中的作用是什么?
34 1
|
2月前
|
API 开发工具 Android开发
iOS 和 Android 平台的开发有哪些主要区别?
iOS与Android开发区别:iOS用Objective-C/Swift,App Store唯一下载渠道;Android用Java/Kotlin,多商店发布(如Google Play、华为市场)。设计上,iOS简洁一致,Android灵活可定制。开发工具,iOS用Xcode,Android用Android Studio。硬件和系统多样性,iOS统一,Android复杂。权限管理、审核流程及API各有特点,开发者需依据目标平台特性进行选择。
38 3
|
13天前
|
前端开发 Android开发 iOS开发
【Flutter前端技术开发专栏】Flutter在Android与iOS上的性能对比
【4月更文挑战第30天】Flutter 框架实现跨平台移动应用,通过一致的 UI 渲染(Skia 引擎)、热重载功能和响应式框架提高开发效率和用户体验。然而,Android 和 iOS 的系统差异、渲染机制及编译过程影响性能。性能对比显示,iOS 可能因硬件优化提供更流畅体验,而 Android 更具灵活性和广泛硬件支持。开发者可采用代码、资源优化和特定平台优化策略,利用性能分析工具提升应用性能。
【Flutter前端技术开发专栏】Flutter在Android与iOS上的性能对比
|
13天前
|
存储 Swift iOS开发
使用Swift开发一个简单的iOS应用的详细步骤。
使用Swift开发iOS应用的步骤包括:创建Xcode项目,设计界面(Storyboard或代码),定义数据模型,实现业务逻辑,连接界面和逻辑,处理数据存储(如Core Data),添加网络请求(必要时),调试与测试,根据测试结果优化改进,最后提交至App Store或其它平台发布。
32 0
|
13天前
|
安全 Swift iOS开发
【Swift 开发专栏】Swift 与 UIKit:构建 iOS 应用界面
【4月更文挑战第30天】本文探讨了Swift和UIKit在构建iOS应用界面的关键技术和实践方法。Swift的简洁语法、类型安全和高效编程模型,加上与UIKit的紧密集成,使开发者能便捷地创建用户界面。UIKit提供视图、控制器、布局、动画和事件处理等功能,支持灵活的界面设计。实践中,遵循设计原则,合理组织视图层次,运用布局和动画,以及实现响应式设计,能提升界面质量和用户体验。文章通过登录、列表和详情界面的实际案例展示了Swift与UIKit的结合应用。
|
13天前
|
存储 安全 Swift
【Swift 开发专栏】使用 Swift 开发一个简单的 iOS 应用
【4月更文挑战第30天】本文介绍了使用 Swift 开发简单 iOS 待办事项应用的步骤。首先,阐述了 iOS 开发的吸引力及 Swift 语言的优势。接着,详细说明了应用的需求和设计,包括添加、查看和删除待办事项的功能。开发步骤包括创建项目、界面搭建、数据存储、功能实现,并提供了相关代码示例。最后,强调了实际开发中需注意的细节和优化,旨在帮助初学者掌握 Swift 和 iOS 开发基础。