2011-04-28 51 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]; 
} 

谢谢。