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