使用AFNetWorking出現(xiàn) Domain=NSURLErrorDomain Code=-1005 "網(wǎng)絡(luò)連接已中斷蛙讥。"的錯(cuò)誤

最近做公司的項(xiàng)目薪丁,使用AFNetworking請(qǐng)求接口遇西,頻繁出現(xiàn) Domain=NSURLErrorDomain Code=-1005 "網(wǎng)絡(luò)連接已中斷, 這個(gè)錯(cuò)誤严嗜。
開始以為是自己寫錯(cuò)了參數(shù)粱檀,或者網(wǎng)絡(luò)不好,但是檢查后都排除了 漫玄, 并且這個(gè)錯(cuò)誤不是一定的茄蚯,時(shí)好時(shí)壞。
在網(wǎng)上查閱不少同類型的錯(cuò)誤睦优,找到了一個(gè)靠譜的答案:

http://blog.sina.com.cn/s/blog_12ec09c9c0102wxj8.html

iOS 頻繁出現(xiàn) Error Domain=NSURLErrorDomain Code=-1005 “The networ
(2017-08-23 13:04:56)![](http://upload-images.jianshu.io/upload_images/1433510-9b48ce0f9c4dd998.gif?imageMogr2/auto-orient/strip)轉(zhuǎn)載*▼*

分類: [iOS技術(shù)](http://blog.sina.com.cn/s/articlelist_5079342236_1_1.html)

解決辦法:服務(wù)端修改KeepAliveTimeout參數(shù)為60s(僅作參考)渗常,我們的項(xiàng)目中是這樣改的,此后再也沒出現(xiàn)此錯(cuò)誤汗盘。參考鏈接:[http://stackoverflow.com/questions/25372318/error-domain-nsurlerrordomain-code-1005-the-network-connection-was-lost/25996971#25996971](http://stackoverflow.com/questions/25372318/error-domain-nsurlerrordomain-code-1005-the-network-connection-was-lost/25996971#25996971)

應(yīng)該是請(qǐng)求還沒有得到回應(yīng)皱碘,連接就被斷開了,但是我們請(qǐng)求不到接口隐孽。
可是當(dāng)我把這個(gè)參數(shù)告訴后臺(tái)讓他修改一下的時(shí)候癌椿,坑爹的地方來(lái)了 , 后臺(tái)說(shuō)他不會(huì)菱阵,說(shuō)沒有這個(gè)參數(shù)踢俄,坑 。因?yàn)槲覀冞@個(gè)應(yīng)用是一個(gè)局域網(wǎng)應(yīng)用 送粱, 后臺(tái)服務(wù)是后臺(tái)用QT開發(fā)的褪贵, 我在網(wǎng)上也查了一下,確實(shí)不好修改抗俄,后臺(tái)吭哧吭哧半天脆丁,也沒找到解決方案 , 沒辦法动雹,只能自己動(dòng)手了槽卫。
我的解決方案是 :接口返回-1005的時(shí)候,重新請(qǐng)求接口 胰蝠, (也是參考網(wǎng)上的解決方法)
下面是封裝的AFNetWorking接口:

@interface XYNetworkingManager ()

//記錄code為-1005連接的請(qǐng)求次數(shù)
//{key - method ,value - faildcount}
@property (nonatomic, strong) NSMutableDictionary *code_1005_method_count_dic;

@end

//請(qǐng)求方法
-(void)PostWith_URL:(NSString *)url Param:(NSDictionary *)dic Method:(NSString *)method Timeout:(NSInteger)timeout Finsh:(XYNetBlock)Block
{
   
    //簽名
    NSDictionary *PostDic = [XYSignManager signXinyiWithDic:dic method:method];

    
    self.manager.requestSerializer.timeoutInterval = timeout;

    [self.manager POST:url parameters:tempDic progress:^(NSProgress * _Nonnull uploadProgress) {
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        if (responseObject == nil) {
            
            NSString *result = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
            XYLog(@"解析失敗:%@",result);
        }
        NSString *resStr = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
         NSDictionary *dic = [resStr mj_JSONObject];
        
        Block(YES,dic);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
     XYLog(@"錯(cuò)誤信息:%@",error);
        if (error.code == -1005) {
            
            XYLog(@"等待5S將重新請(qǐng)求任務(wù)");
           //這是定義的一個(gè)字典歼培,用來(lái)記錄請(qǐng)求錯(cuò)誤的的接口名以及錯(cuò)誤的次數(shù)
            self.code_1005_method_count_dic = [[NSMutableDictionary alloc] init];
            [self.code_1005_method_count_dic setObject:@(1) forKey:method];
            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
                
                dispatch_group_t downloadGroup = dispatch_group_create();
                dispatch_group_enter(downloadGroup);
                dispatch_group_wait(downloadGroup, dispatch_time(DISPATCH_TIME_NOW, 5000000000)); // Wait 5 seconds before trying again.
                dispatch_group_leave(downloadGroup);
                dispatch_async(dispatch_get_main_queue(), ^{
                   //重新請(qǐng)求的方法
                    [self rePostWith_URL:url Param:dic Method:method Timeout:15 Finsh:^(BOOL isSuccess, NSDictionary *responseDic) {
                        if (isSuccess) {
                             Block(YES,responseDic);
                        }
                        else
                        {
                             Block(NO,nil);
                        }
                    }];
                });
            });
            
        }
        else
        {
           Block(NO,nil);
        }
        
        
        
    }];
  
}




//  -1005重新請(qǐng)求
-(void)rePostWith_URL:(NSString *)url Param:(NSDictionary *)dic Method:(NSString *)method Timeout:(NSInteger)timeout Finsh:(XYNetBlock)Block
{
    
    
    XYLog(@"任務(wù)重新請(qǐng)求");
 
    int recount =  [self.code_1005_method_count_dic[method] intValue];
    recount++;
    [self.code_1005_method_count_dic setObject:@(recount) forKey:method];
    
    
    //簽名
    NSDictionary *PostDic = [XYSignManager signXinyiWithDic:dic method:method];
    
    
    self.manager.requestSerializer.timeoutInterval = timeout;
    
    
    [self.manager POST:url parameters:PostDic progress:^(NSProgress * _Nonnull uploadProgress) {
        
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

        XYLog(@"重新請(qǐng)求成功");
        NSString *resStr = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
        NSDictionary *dic = [resStr mj_JSONObject];
        Block(YES,dic);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
         if (error.code == -1005) {
         
             int count =  [self.code_1005_method_count_dic[method] intValue];
             if (count >= 5) {
                 
                 XYLog(@"重新請(qǐng)求超過限制震蒋,停止請(qǐng)求");
                  Block(NO,nil);
                 return ;
             }
             else
             {
                 
                 [self rePostWith_URL:url Param:dic Method:method Timeout:15 Finsh:^(BOOL isSuccess, NSDictionary *responseDic) {
                     if (isSuccess) {
                         Block(YES,responseDic);
                     }
                     else
                     {
                         Block(NO,nil);
                     }
                 }];
                 
                 //return ;
             }
             
             
         }
        else
        {
            
            XYLog(@"重新請(qǐng)求失敗");
            Block(NO,nil);
        }
        
    }];

}



思路就是遇到 -1005 這個(gè)錯(cuò)誤的時(shí)候,記錄下來(lái)躲庄,5S之后重新請(qǐng)求一下這個(gè)接口查剖,最多會(huì)請(qǐng)求5次 , 如果5次請(qǐng)求都失敗就不再請(qǐng)求了 噪窘, 防止死循環(huán)笋庄。

改成這樣之后就解決問題了 。

參考鏈接:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末倔监,一起剝皮案震驚了整個(gè)濱河市直砂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌浩习,老刑警劉巖静暂,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異谱秽,居然都是意外死亡洽蛀,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門弯院,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)辱士,“玉大人,你說(shuō)我怎么就攤上這事听绳∷痰猓” “怎么了?”我有些...
    開封第一講書人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵椅挣,是天一觀的道長(zhǎng)头岔。 經(jīng)常有香客問我,道長(zhǎng)鼠证,這世上最難降的妖魔是什么峡竣? 我笑而不...
    開封第一講書人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮量九,結(jié)果婚禮上适掰,老公的妹妹穿的比我還像新娘。我一直安慰自己荠列,他們只是感情好类浪,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著肌似,像睡著了一般费就。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上川队,一...
    開封第一講書人閱讀 51,190評(píng)論 1 299
  • 那天力细,我揣著相機(jī)與錄音睬澡,去河邊找鬼。 笑死眠蚂,一個(gè)胖子當(dāng)著我的面吹牛煞聪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播河狐,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼米绕,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼瑟捣!你這毒婦竟也來(lái)了馋艺?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤迈套,失蹤者是張志新(化名)和其女友劉穎捐祠,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體桑李,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡踱蛀,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了贵白。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片率拒。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖禁荒,靈堂內(nèi)的尸體忽然破棺而出猬膨,到底是詐尸還是另有隱情,我是刑警寧澤呛伴,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布勃痴,位于F島的核電站,受9級(jí)特大地震影響热康,放射性物質(zhì)發(fā)生泄漏沛申。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一姐军、第九天 我趴在偏房一處隱蔽的房頂上張望铁材。 院中可真熱鬧,春花似錦奕锌、人聲如沸著觉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)固惯。三九已至,卻和暖如春缴守,著一層夾襖步出監(jiān)牢的瞬間葬毫,已是汗流浹背镇辉。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留贴捡,地道東北人忽肛。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像烂斋,于是被迫代替她去往敵國(guó)和親屹逛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容