socket通信 的一些坑

因為項目中用用到socket通信 實現(xiàn)夸平臺的局域網(wǎng)實時通信。下面羅列一些我在使用過程中遇見錯誤和我的處理方式:一般socket通信的錯誤都會傳到- (void)socketDidDisconnect:(GCDAsyncSocket *)sock withError:(NSError *)error 這個代理方法中

1.Error Domain=GCDAsyncSocketErrorDomain Code=4 "Read operation timed out" UserInfo=0xa8db6a0 {NSLocalizedDescription=Read operation timed out}
scoket讀取數(shù)據(jù)超時,當網(wǎng)絡(luò)不怎么穩(wěn)定通信方給發(fā)送消息的時候時不時的會冒一個這個錯誤,而且Socket也會自動斷開連接。一直跟蹤GCDAsyncSocket.m的代碼5068行<可能代碼有更新的會有點差異>有一個方法

  • (void)setupReadTimerWithTimeout:(NSTimeInterval)timeout
    這個方法是就是專門監(jiān)聽socket讀取數(shù)據(jù)是否有超時的現(xiàn)象的方法,源代碼設(shè)置成if(timeout >= 0.0)即檢測到超時就拋異常 這樣很容易導(dǎo)致socket連接異常。
    處理方式:你可以打印一下這個timeout值,就會大概知道你的socket讀取數(shù)據(jù)超時的范圍,在項目允許的范圍內(nèi)設(shè)置這個值的大小,因為我的項目總是在10以內(nèi),所以我設(shè)置成if(timeout > 10.0)之后,基本運行的時候就很少拋這個異常了。你也可以再接收到這個異常的時候重新連接一次。

2.Error Domain=GCDAsyncSocketErrorDomain Code=3 "Attempt to connect to host timed out" UserInfo=0x7bd14f40 {NSLocalizedDescription=Attempt to connect to host timed out}
socket連接的時候超時,一般發(fā)生在你向服務(wù)端發(fā)送一條連接消息的時候,服務(wù)端無響應(yīng),一般是由于服務(wù)端沒有開啟服務(wù),也有可能是設(shè)置響應(yīng)時間的timeout值過小,在GCDAsyncSocket.m的代碼1938行的位置有一個設(shè)置timeout的地方 你可以設(shè)置一個稍微比較長的響應(yīng)時間

  • (BOOL)connectToHost:(NSString*)host onPort:(uint16_t)port error:(NSError **)errPtr
    {
    return [self connectToHost:host onPort:port withTimeout:5 error:errPtr];
    }

3.Error Domain=GCDAsyncSocketErrorDomain Code=51,網(wǎng)絡(luò)斷開,可以檢查一下網(wǎng)絡(luò)連接狀態(tài)

4.Error Domain=NSPOSIXErrorDomain Code=61 "Connection refused" UserInfo=0x7b288750 {NSLocalizedFailureReason=Error in connect() function, NSLocalizedDescription=Connection refused}
服務(wù)器沒啟動,或者端口沒開啟。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • iPhone的標準推薦是CFNetwork 庫編程,其封裝好的開源庫是 cocoa AsyncSocket庫,用它...
    Ethan_Struggle閱讀 2,361評論 2 12
  • https://nodejs.org/api/documentation.html 工具模塊 Assert 測試 ...
    KeKeMars閱讀 6,609評論 0 6
  • 因為項目中用用到socket通信 實現(xiàn)夸平臺的局域網(wǎng)實時通信。下面羅列一些我在使用過程中遇見錯誤和我的處理方式:一...
    9426Ami閱讀 9,451評論 0 0
  • 轉(zhuǎn)載:http://www.cocoachina.com/ios/20170615/19529.html 參考:h...
    F麥子閱讀 4,138評論 3 2
  • 復(fù)盤,即是通過回憶總結(jié),發(fā)現(xiàn)自己之前做的不對的地方, 從而下次能有效避開,取得進步 我最近才發(fā)現(xiàn),無論學(xué)習工作打游...
    liyumy閱讀 215評論 0 0

友情鏈接更多精彩內(nèi)容