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并詳細見解實現代碼及封裝,這是第一次寫文章,希望大家指出不足和有錯誤的地方,多討論多進步。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容