你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> IOS中使用 CocoaAsyncSocket​

IOS中使用 CocoaAsyncSocket​

編輯:IOS開發綜合

Socket

如今在 iOS 裡對 Socket 的應用慢慢多了起來,就一個即時通訊,很多應用都有集成,那即時通訊功能一般來說就肯定是基於 Socket 的,Socket 這個話題我一直談論的比較少,一是由於看過一些 C/C++ 操作 Socket 的代碼被嚇到了一直還有心理陰影存在,二是工作裡沒怎麼遇到相關的需求應用,所以也沒有去深入研究相關內容。

還沒接觸過 Socket 編程肯定也會聽說過這幾個關鍵字:包、握手、連接、TCP、UDP 等等,Socket 編程的文章網上大把大把有,而作為一個初心者總是對這些 望文生怯,之前我也是如此,所以深有體會,希望讀完本篇文章後你會對 在 iOS 平台上的 Socket 編程有一個簡單的了解,那就是不要怕!

Socket on iOS

在 iOS 上,哦不,應該說 Cocoa 的世界裡,Socket 編程應該有以下幾種方式:

sys/socket.h - 系統底層 Socket 編程接口
CFNetwork - Core Foundation 中對 socket 的封裝
NSStream - Cocoa 中對 CFNetwork 的封裝
當然,上面這些都是大哥級別的,但是就是不想寫C,我們小白當然可以用用抽象更高的開源庫,比如:

CocoaAsyncSocket
SocketRocket
Socket.IO
CocoaAsyncSocket

之前一直沒有機會在 iOS 平台上寫 Socket,最近遇到一個需要用 Socket 做文件上傳下載的功能,那麼 iOS 上做 Socket 編程大家都知道是 CocoaAsyncSocket 一家獨大,也木有發現其他更好的替代品,於是簡單看了看文檔,就操刀上戰場了。

CocoaAsyncSocket 是一個純 Objective-C 的開源庫,用起來非常簡單,當然也兼容了 Swift 的語法。

TCP & UDP

如果你看到 CocoaAsyncSocket 主頁的說明應該會注意到有 TCP 和 UDP 兩套接口,簡單來說就是 Socket 支持兩種協議,一個叫 TCP、一個叫 UDP;TCP 面向連接,每次請求需要幾次 “握手”,數據有序可靠;UDP 就簡單點,不握手了,發包也無序,不用保持連接,也不用一些其它的開傳輸開銷,帶寬消耗就更少。然後 CocoaAsyncSocket 針對於 TCP 和 UDP 分別封裝出來了兩套 API,命名分別以 TCP 或 UDP 打頭。

GCD & Run-loop

仔細觀察 CocoaAsyncSocket 對其類的命名可以發現除了 TCP 和 UDP 分拆成了兩套 API,一套時基於 GCD 程安全的 GCDAsyncSocket/GCDAsyncUdpSocket,一套是基於 Run-loop 的 AsyncSocket/AsyncUdpSocket,一般來說我們用基於 GCD 的封裝就好了。

在實際應用中我想大多數需求都是基於 TCP 的,所以我們主要看看 GCDAsyncSocket,看到 GCD 不要以為其所有回調都是 GCD 的,看了源碼你就知道所有回調全是 Delegate。

GCDAsyncSocket

一般 iOS 上 socket 做 client 端居多,所以用到的一些基本操作就是 connect、read、write、disconnect,GCDAsyncSocket 的封裝非常簡單,初上手可能遇到的問題就在於一個完整的 socket 操作流程的不清楚,只要摸清楚服務端的邏輯流程就很輕松了,比如需要先讀多少字節,然後從結果中解析出某部分數據,然後再讀多少字節,再分析數據,再讀再寫...

總結

其實 Socket 並沒有想象中的那麼復雜,很多底層的工作框架都替我們做了,可以更集中精力在業務邏輯上。

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved