2011-04-28 52 views
1

我正在下載文件(使用apache tomcat 6.0.32)。當我斷開連接(關閉tomcat)時,ASHITTPRequest會產生錯誤,但有時(大部分時間正好......完全正確!只有在開始時沒有連接發生錯誤時)它會像所有正確的一樣工作。當連接丟失時ASIHTTPRequest沒有錯誤

所以有一個問題:爲什麼會發生這種情況,我怎麼才能看到連接是否丟失。

非常感謝!

UPDATE:

嘗試通過發送TCPMon的請求,然後停止它(TCPMon的),並得到相同的:ASIHTTPRequest認爲下載正確。

UPDATE:

responseHeaders響應:

"Content-Disposition" = attachment; 
"Content-Length" = 2277888; 
"Content-Type" = "application/octet-stream"; 
Date = "Thu, 28 Apr 2011 12:35:32 GMT"; 
Server = "Apache-Coyote/1.1"; 
"Set-Cookie" = "JSESSIONID=98CAE6C0C4275B528D5E0F8651546AFE; Path=/ISED"; 

responseStatusMessage:

HTTP/1.1 200 OK 

UPDATE:

如果用手斷開計算機(斷開電纜),並得到這個:

有時候ASIHTTPRequest會一直等到超時,並且下一個請求會出現連接錯誤。

有時發生錯誤只是在我斷開連接的時間。

有時候不會發生錯誤,我只是斷開連接:下載進度丟失,並且(如果再次連接)它從頭開始下載。

如果關閉端口ASIHTTPRequest認爲成功下載完成。

我無法理解這樣的邏輯...

SOLUTION:

我解決了在頁眉和總字節數比較Content-Length的問題閱讀:

NSString *contentLength = [[self.request responseHeaders] valueForKey:@"Content-Length"]; 
NSString *downloadedBytesCount = [NSString stringWithFormat:@"%llu",[self.request totalBytesRead]]; 


     if ([contentLength isEqualToString:downloadedBytesCount] == NO) { 
      // error maintain 
     } 

,所以我可以檢查我是否得到所有數據,如果沒有:保持錯誤。 在其他情況下(如手動斷開連接),ASIHTTPRequest以合適的方式工作並自行生成錯誤。

+0

你用NSURLConnection測試過了嗎?requestFinished委託方法中的響應(標題和正文)是什麼意思? – 2011-04-28 12:17:16

回答

1

用於檢查連接狀態我使用ASI的可達性庫。我相信可達性與ASI不能確定。

這不是我從某處取得的防雷碼,但它工作完美無瑕。

#import "Reachability.h" 

-(void)viewDidAppear:(BOOL)animated 
{ 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkNetworkStatus:) name:kReachabilityChangedNotification object:nil]; 
} 

- (void) checkNetworkStatus:(NSNotification *)notice 
{ 
    NetworkStatus internetStatus = [internetReachable currentReachabilityStatus]; 
    switch (internetStatus) 
    { 
     case NotReachable: 
     { 
      NSLog(@"The internet is down."); 
      //self.internetActive = NO; 

      break; 
     } 
     case ReachableViaWiFi: 
     { 
      NSLog(@"The internet is working via WIFI."); 
      //self.internetActive = YES; 

      break; 
     } 
     case ReachableViaWWAN: 
     { 
      NSLog(@"The internet is working via WWAN."); 
      //self.internetActive = YES; 
      break; 
     } 
    } 
} 

我改變了一點關於我的需要的代碼它返回YES/NO。你應該在某個時候刪除觀察者。

- (void)viewDidUnload 
{ 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
} 

謝謝。