原文在:http://disanji.net/2011/08/12/cocoaasyncsocket%E5%AD%A6%E4%B9%A0/
CocoaAsyncSocket支持tcp和udp。其中:
- AsyncSocket类是支持TCP的
- AsyncUdpSocket是支持UDP的
AsyncSocket是封装了CFSocket和CFSteam的TCP/IP
socket网络库。它提供了异步操作,本地cocoa类的基于delegate的完整支持。主要有以下特性:
- 队列的非阻塞的读和写,而且可选超时。你可以调用它读取和写入,它会当完成后告知你
- 自动的socket接收。如果你调用它接收连接,它将为每个连接启动新的实例,当然,也可以立即关闭这些连接
- 委托(delegate)支持。错误、连接、接收、完整的读取、完整的写入、进度以及断开连接,都可以通过委托模式调用
- 基于run loop的,而不是线程的。虽然可以在主线程或者工作线程中使用它,但你不需要这样做。它异步的调用委托方法,使用NSRunLoop。委托方法包括socket的参数,可让你在多个实例中区分
- 自包含在一个类中。你无需操作流或者socket,这个类帮你做了全部
- 支持基于IPV4和IPV6的TCP流
AsyncUdpSocket是UDP/IP socket网络库,包装自CFSocket。它的工作很像TCP版本,只不过是用于处理UDP的。它包括基于非阻塞队列的发送接收操作,完整的委托支持,基于runloop,自包含的类,以及支持IPV4和IPV6。
以下内容是根据官方网站参考:
http://code.google.com/p/cocoaasyncsocket/wiki/Reference_AsyncSocket
编写的示例。
准备工作:如何在iOS项目中使用
可按照官网链接执行:
基本上是两步:
- 将CocoaAsyncSocket项目中的.h和.m文件拖拽到自己项目的Classes目录中
- 添加framework:CFNetwork
编写简单的TCP连接
编写个简单的TCP连接应用。HTTP其实就是建立在TCP协议上的。这里就用向网站发起请求和获得响应来演示。
为了形象说明,先手工模拟一下HTTP。这需要用到telnet工具,这是个命令行工具,如果在命令行里敲:
C:\Users\Marshal Wu>telnet
‘telnet’ 不是内部或外部命令,也不是可运行的程序
或批处理文件。
说明你使用的是windows vista或者windows7,因为windows xp是默认安装该软件的。
我用的是Mac OSX,上面自带这个工具。如果你出现上面的问题,可参照vista下使用telnet的做法安装telnet。
然后,可以使用这个工具发出socket信息,并接收socket返回信息。下面说一下步骤,如图:
下面用CocoaAsyncSocket来实现。
首先是要实现相关的delegate:
然后,在实现代码中: