qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請訪問 http://qaseven.github.io/

          iOS項目開發(fā)之Socket編程

           有一段時間沒有認(rèn)真總結(jié)和寫博客了
            前段時間找工作、進入工作階段。比較少靜下來認(rèn)真總結(jié),現(xiàn)在靜下心來總結(jié)一下最近的一些心得
            前言
            AsyncSocket介紹
            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)體。

          posted on 2014-08-04 09:55 順其自然EVO 閱讀(3774) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          <2014年8月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 通江县| 株洲市| 克什克腾旗| 新巴尔虎左旗| 仁寿县| 莆田市| 台湾省| 湖北省| 车致| 海门市| 清丰县| 花莲县| 张家港市| 汕头市| 白朗县| 旬邑县| 石门县| 广汉市| 宁都县| 吉林省| 拜城县| 正宁县| 雷州市| 铁力市| 湟源县| 萍乡市| 黄浦区| 达孜县| 郓城县| 图木舒克市| 贵德县| 常熟市| 张北县| 郁南县| 扎鲁特旗| 宜都市| 横山县| 福贡县| 楚雄市| 长治县| 穆棱市|