iOS項目開發之Socket編程
有一段時間沒有認真總結和寫博客了
前段時間找工作、進入工作階段。比較少靜下來認真總結,現在靜下心來總結一下最近的一些心得
前言
AsyncSocket詳解
AsyncSocket示例
一、前言
公司的項目用到了Socket編程,之前在學習的過程當中,用到的更多的還是http請求的方式。但是既然用到了就必須學習一下,所以就在網上找一些例子,然后想自己寫一個demo。可是發現很多寫iOS Socket的博客并沒有很詳細的說明,也可能是大神們覺得其他東西都淺顯易懂。
自己專研了一下,將自己的一些理解總結出來,一方面整理自己的學習思路,另一方面,為一些和我有同樣困惑的小伙伴們,稍做指引。
二、AsyncSocket介紹
1)iOS中Socket編程的方式有哪些?
-BSD Socket
BSD Socket 是UNIX系統中通用的網絡接口,它不僅支持各種不同的網絡類型,而且也是一種內部進程之間的通信機制。而iOS系統其實本質就是UNIX,所以可以用,但是比較復雜。
-CFSocket
CFSocket是蘋果提供給我們的使用Socket的方式,但是用起來還是會不太順手。當然想使用的話,可以細細研究一下。
-AsyncSocket
這次博客的主講內容,也是我們在開發項目中經常會用到的。
2)為什么選擇AsyncSocket?
iphone的CFNetwork編程比較艱深。使用AsyncSocket開源庫來開發相對較簡單,幫助我們封裝了很多東西。
三、AsyncSocket詳解
1??說明
在我們開發當中,我們主要的任務是開發客戶端。所以詳解里主要將客戶端的整個連接建立過程,以及在說明時候回調哪些函數。在后面的示例代碼中,也會給出服務器端的簡單開發。
2??過程詳解
1.建立連接
- (int)connectServer:(NSString *)hostIP port:(int)hostPort
2.連接成功后,會回調的函數
- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port
3.發送數據
- (void)writeData:(NSData *)data withTimeout:(NSTimeInterval)timeout tag:(long)tag;
4.接受數據
-(void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
5.斷開連接
- (void)onSocket:(AsyncSocket *)sock willDisconnectWithError:(NSError *)err
- (void)onSocketDidDisconnect:(AsyncSocket *)sock
主要就是上述的幾個方法,只是說在真正開發當中,很可能我們在收發數據的時候,我們收發的數據并不僅僅是一個字符串包裝成NSData即可,我們很可能會發送結構體等類型,這個時候我們就需要和服務器端的人員協作來開發:定義怎樣的結構體。