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

作者: 小儿小二 | 来源:发表于2015-11-04 11:16 被阅读3581次

    该系列文章不会过多的介绍原理知识,意在应用方面,没有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并详细见解实现代码及封装,这是第一次写文章,希望大家指出不足和有错误的地方,多讨论多进步。

    相关文章

      网友评论

      • ali_hilo: 你好啊 最近公司用java写了一套即时通讯 H5版的已经接好了 可以实现聊天了 现在iOS版准备开发, 我该怎么和java对接呢 用这个CocoaAsyncSocket 可以实现对接吗? 谢谢啊 求指导一下
      • Royvonne:楼主你好~ 我最近也在做socket方面的工作,但是有点疑问想请教一下~
        asyncSocket和socketRocket是类似的库吗?本来是用as,但是不知道在哪弄连接时候的protocols. 因为项目赶时间,我就换了socketRocket解决问题 但结束之后还是想弄清楚~
        Royvonne:@Royvonne 哦~ 大概明白区别了 socket和webSocket~ 自己迷糊了~

      本文标题:iOS网络编程之TCP/IP应用篇(一)-框架介绍(CocoaA

      本文链接:https://www.haomeiwen.com/subject/nxjqhttx.html