iOS网络编程之TCP/IP应用篇(一)-框架介绍(CocoaAsyncSocket)

该系列文章不会过多的介绍原理知识,意在应用方面,没有socket编码经验的看了此系列文章后可以完全上手并初步了解tcp/ip。如果需要更深的理解请参考其他书籍及文章。

一,第三方框架介绍

      在app开发过程中用的最多的是http/https(其实是用tcp/IP实现的),大部分功能是获取数据,显示数据,用户主动请求的一对一模式,服务器不能主动的向app发送数据。tcp/IP是面向链接,稳定,数据流(无边界)的,后面我们会根据这些特性来编写代码。常用的第三方框架有2种,一种基于nsrunloop,一种基于gcd,后面讲的都是用基于nsrunloop的CocoaAsyncSocket。robbiehanson/CocoaAsyncSocket · GitHub

二,�项目中使用的接口及协议回调

       项目中要用的的api

      1,- (id)initWithDelegate:(id)delegate;初始化并设置委托

      2,- (BOOL)connectToHost:(NSString*)hostname onPort:(UInt16)port error:(NSError**)errPtr;根据ip及端口链接服务器;

      3,- (void)writeData:(NSData*)data withTimeout:(NSTimeInterval)timeout tag:(long)tag;发送数据;

      4,- (void)disconnect;断开链接;

      上面提到了设置委托,要实现以下委托方法

      1,- (void)onSocket:(AsyncSocket*)sock didConnectToHost:(NSString*)host port:(UInt16)port;建立连接成功后回调;

      2,-(void) onSocket:(AsyncSocket*)socket willDisconnectWithError:(NSError*)err;连接断开后回调;

      3,-(void) onSocket:(AsyncSocket*)sock didReadData:(NSData*)data withTag:(long)tag;接收数据回调;

其他api及协议可以看源码中的注释,使用以上api就可以满足项目的需求(我的情况)

三,二次封装

    在项目中为了方便管理和分离,我们应该在这个库上加一层封装,下面代码为头文件,首先根据tcp/ip流程来建立头文件

1,建立socket 2,请求连接 3,发送数据 4,接收数据 5,关闭

@classAsyncSocket;

@interfaceTCPIPStream :NSObject

{

uint8_t  m_pBuffer[SOCKET_TCP_BUFFER];//接收缓冲   1

int m_nBufferLen;//缓冲长度                                        2

}

@property(nonatomic,weak)id delegate;//处理接口

@property(nonatomic,strong)AsyncSocket*m_pSocket;

/**创建*/

+ (instancetype)CreateTcpIPStream:(id)delegate;

/**初始化*/

- (instancetype)initTcpIPSteam:(id)delegate;

/**直接获取服务器的输入输出流*/

-(void)CreateConnectWithAddress:(NSString*)address port:(uint)port;

/**发送数据*/

-(bool)SendToServer:(uint8_t*)pData size:(uint)nDataSize;

/**关闭连接*/

-(void)ClosedStream;

后面的文章会逐步实现头文件的api并详细见解实现代码及封装,这是第一次写文章,希望大家指出不足和有错误的地方,多讨论多进步。

你可能感兴趣的:(iOS网络编程之TCP/IP应用篇(一)-框架介绍(CocoaAsyncSocket))