ios开发 网络编程浅析(二)

转载 2013年12月02日 13:44:57

CFStream  

     读写流以设备依赖的方式为交换数据提供了一个简单的途径。可以为内存中的数据、文件中的数据或网络上的数据(使用套接字)创建流,而不用把全部数据一次性读到内存中去。套接字流为通过套接字读写数据提供了一个简单易用的接口。每个套接字都可以与输入流和输出流绑定,允许异步的通信。CFStream包装了大部分读写字节流需要的工作,替换了C语言中传统的send和recv方法。CFSream对象包括两种类型:CFReadStream和CFWriteStream。

1.CFReadStream

   它提供了一系列从套接字读取数据相关的方法,下面列出其中一些常用的函数。

(1)CFReadStreamOpen和CFReadStreamClose  打开和关闭一个读取流(read stream),分配或释放相关资源。读取流打开后,才能从中读取数据。

(2)CFReadStreamRead  从流中读取数据的函数,返回实际读取的字节数。这个方法会阻塞直到接收到数据。

(3)CFReadStreamGetBufer  返回指向读取流内部未读数据缓存区的指针。

(4)CFReadStreamGetStatus  返回读取流的当前状态。 

 

读取流的当前状态 
  •  kCFStreamStatusNotOpen(读取流没有被打开)
  • kCFStreamStatusOpening(读取流正在被打开)
  • kCFStreamStatusOpen(读取流已经被打开)
  • kCFStreamReading(正在对流执行读取操作)
  • kCFSreamStatusAtEnd(读取流中没有可以读取的数据)
  • kCFStreamStatusClosed(读取流已经被关闭)
  • kCFStreamStatusError(读取流的时候发生了错误)
(5)CFReadStreamHasBytesAvailable。

 

返回一个布尔值,表示是否存在数据可以不阻塞地读取。如果不通过实际读取操作函数无法确定是否存在数据,则返回TRUE。

(6) CFReadStreamSheduleWithRunLoop和CFReadStreamUnscheduleFromRunLoop。

通过调用CFReadStreamSheduleWithRunLoop,指定run loop和run loop模式,使用CFReadStreamSetClient方法设置的回调函数在事件发生时会被调用。比如,在流被打开、有数据可以读取等事件发生时调用回调函数。使用 CFReadStreamUnscheduleFromRunLoop函数从run loop中移除。

(7)CFReadStreamSetClient。

 设置回调函数在一些事件发生时被调用。回调函数的声明类似于如下所示。

  void CallBackTest(

CFReadStreamRef stream,

CFStreamEventType eventType,

void *clientCallBackInfo 

  ) 

 与CFSocket的回调函数类似,回调函数可以得到事件类型和相关的数据。事件类型的定义如下。

   typedef enum

  {

kCFStreamEventNone = 0,(没有事件发生)

kCFStreamEventOpenCompleted = 1,(流被成功打开)

kCFStreamEventHasBytesAvailable = 2,(有数据可以读取)

kCFStreamEventCanAcceptBytes = 4,(流可以接受写入数据(用于写入流))

kCFStreamEventErrorOccurred = 8(在流上有错误发生)

kCFStreamEventEndEncountered = 16 (到达了流的结束位置)

  } CFStreamEventType;

 

 2.CFWriteStream

 CFWriteStream和CFReadStream相对应,它提供了向套接字流写入数据(发送数据)的方法。下面列出一些常用的函数。

(1)CFWriteStreamOpen和CFWriteStreamClose

打开和关闭一个写入流(write stream),分配或释放相关资源。写入流打开后,才能向其中写入数据。

(2)CFWriteStreamWrite

向流中写入数据的函数,返回实际发送的字节数。这个方法会阻塞,直到数据被发送完。 

(3)CFWriteStreamStatus

返回写入流的当前状态,为以下几种。

  • kCFStreamStatusNotOpen(写入流没有被打开)
  • kCFStreamStatusOpening(写入流正在被打开)
  • kCFStreamStatusOpen(写入流已经被打开)
  • kCFStreamWriting(正在对流执行写入操作)
  • kCFStreamStatusAtEnd(没有数据可以向流中写入)
  • kCFStreamStatusClosed(写入流已经被关闭)
  • kCFStreamStatusError (写入流的时候发生了错误)

(4)CFWriteStreamCanAcceptBytes

返回一个布尔值,表示是否可以不阻塞地向流中写入数据。如果不通过实际写入操作函数无法确定是否可以写入,则返回TRUE。 

(5)CFWriteStreamSheduleWithRunloop 和 CFWriteStreamUnscheduleFromRunLoop

通过调用 CFWriteStreamSheduleWithRunloop ,指定run loop和run loop模式,使用CFWriteStreamSetClient方法设置的回调函数在事件发生时会被调用。比如,在流被打开、可以发送数据事件发生时调用回调函数。使用CFWriteStreamUnscheduleFromRunLoop函数从run loop中移出。

(6)CFWriteStreamSetClient

 设置回调函数在一些事件发生时被调用。回调函数的声明类似于如下所示。

  void CallBackTest (

  CFWriteStreamRef stream,

CFStreamEventType eventType,

void *clientCallBackInfo 

  ) ;

 与CFSocket的回调函数类似,回调函数可以得到事件类型和相关的数据。


转自:http://www.cnblogs.com/hanjun/archive/2012/11/17/2775194.html

相关文章推荐

ios开发 网络编程浅析

iphone包含了很多框架和库,从底层的套接字到不同层次的封装,可以方便地给程序添加网络功能。     (1)BSD套接字。最底层的套接字,这是Unix网络开发常用的API。如果从其他系统移植程序,...

ios开发 网络编程浅析(一)

iphone包含了很多框架和库,从底层的套接字到不同层次的封装,可以方便地给程序添加网络功能。     (1)BSD套接字。最底层的套接字,这是Unix网络开发常用的API。如果从其他系统移植程...

iOS开发之网络编程:XML,JSon解析

一、XML和JSon是什么 XML 下面是一段XML文本: 大家可以看看,有什么特点。 好了,我就不卖关子了,第一行介绍XML的版本和编码格式。 下面就是一个个形...

ios开发之网络编程

上周末本应早写这个网络和MapKit的。 由于周六朋友聚会,周日送一朋友回远方,吃吃喝喝的就忘掉了。 网络编程基本是移动互联这块中必须掌握的编程技巧。由于我买的的小柚子书上没有...
  • IT_DS
  • IT_DS
  • 2014年12月09日 15:18
  • 751

iOS开发之网络编程:同步,异步请求差异及用法

一、同步请求 在网络编程第二篇,咱们写的get,post请求使用的都是同步请求,那结合同步异步、get/post组合在一起,有同步get、同步post、异步get、异步post。大多数情况下出于...

iOS开发之网络编程--AFNetwork_AFN3.X解析

前言:第三方网络请求框架中AFNetwork 3.x收欢迎程度相当高的: 由于iOS 7 和 Mac OS X 10.9 Mavericks 中一个显著的变化就是对 Foundation URL...

ios开发 网络编程HTTP/FTP连接

1.CFHTTP    可以使用CFHTTP API创建HTTP请求,通常HTTP请求方法包括GET、HEAD、PUT、POST、DELETE、TRACR、CONNECT和OPTIONS。使用CFH...

iOS开发 - 网络编程之HTTP协议

1、简介 1.1 几乎所有的应用都用到网络,依靠才能实现实时的数据交换和更新 1.2 移动互联时代,移动应用如果没有数据的更新就如一潭死水,毫无生气 1.3 网络开发是开发优秀应用的前提和基础 2...

ios开发进阶之多线程03 RunLoop 网络编程

一 RunLoop简介 什么是RunLoop运行循环 一个线程对应一个RunLoop,主线程的RunLoop默认已经启动,子线程的RunLoop得手动启动(调用run方法) RunLoop只能选择一个...
  • ab20514
  • ab20514
  • 2015年08月28日 22:55
  • 409

从Samples中入门IOS开发(四)------ 基于socket的网络编程

为自己学习用
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ios开发 网络编程浅析(二)
举报原因:
原因补充:

(最多只允许输入30个字)