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

从零开始学Hadoop----浅析HDFS(二)

上一篇,我们简单介绍了一下Hadoop的核心之一HDFS,对其中的一些概念有了一定的了解。今天我们来看看HDFS的一些原理解析。 今天我们接着上次介绍了一下HDFS的概念之后,我们对HDFS的...
  • u010168160
  • u010168160
  • 2016年05月10日 08:59
  • 1493

“Ceph浅析”系列

开源技术专家章宇同学(@一棹凌烟)在C3沙龙分享过Ceph之后,最近来了劲头,一口气写了一系列《Ceph浅析》的博文,共8篇: “Ceph浅析”系列之一——前言 “Ceph浅析”系列之二——Ceph概...
  • qq_24916117
  • qq_24916117
  • 2015年12月30日 18:08
  • 594

【C语言】 浅谈指针

指针是就是地址,是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。 要搞清一个指针需要搞清指针的四方面的内容:指针的类型、指针所指向的 类型、指针的值或者叫指针所指向的内存区、指针本身所占...
  • wbq1480
  • wbq1480
  • 2016年05月26日 12:25
  • 1428

jQuery和AngularJS的区别浅析

jQuery和AngularJS的区别浅析 这篇文章主要介绍了jQuery和AngularJS的区别浅析,本文着重讲解一个熟悉jQuery开的程序员如何应对AngularJS中的一些编程思想...
  • sundehui01
  • sundehui01
  • 2016年08月25日 10:15
  • 121

linux组调度浅析

cgroup与组调度       linux内核实现了control group功能(cgroup,since linux 2.6.24),可以支持将进程分组,然后按组来划分各种资源。比如:gr...
  • ctthunagchneg
  • ctthunagchneg
  • 2013年05月11日 17:08
  • 2720

Linux内存管理浅析(一)

1.Linux内存管理的主要内容 a.      虚拟内存管理 b.      内核空间内存管理 c.      用户空间内存管理 2.虚拟内存和物理内存映射 ZONE_HIGH...
  • u012398362
  • u012398362
  • 2016年11月27日 19:40
  • 774

浅谈12306架构

原文地址:http://blog.csdn.net/qq_21260033/article/details/78969329 读了几篇有关12306架构设计的博客,在这里做下简单的总结: ...
  • tanga842428
  • tanga842428
  • 2018年01月16日 16:50
  • 193

MVC框架的浅谈

MVC框架 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离...
  • qq_33642117
  • qq_33642117
  • 2016年07月11日 15:29
  • 612

PageRank算法浅析

PageRank,即网页排名,又称网页级别、Google左侧排名或佩奇排名。 PageRank,网页排名,又称网页级别、Google左侧排名或佩奇排名,是一种由搜索引擎根据网页之间相互的超链接计算的技...
  • u013035103
  • u013035103
  • 2014年04月24日 10:21
  • 4994

Linux 线程浅析

进程和线程的区别与联系 在许多经典的操作系统教科书中,总是把进程定义为程序的执行实例,它并不执行什么, 只是维护应用程序所需的各种资源,而线程则是真正的执行实体。 为了让进程完...
  • lianghe_work
  • lianghe_work
  • 2015年08月19日 10:36
  • 761
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ios开发 网络编程浅析(二)
举报原因:
原因补充:

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