2011-04-28 7 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가 성공했다고 판단되면 다운로드가 완료됩니다.

나는이 논리를 이해할 수 없다

...

해결책 :

내가 헤더와 총 바이트 콘텐츠 길이를 비교하여 문제가 해결 읽어

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 위임 메서드에서 응답 (머리글과 본문)은 무엇이라고 말합니까? –

답변

1

연결 상태 확인 용 ASI에서 Reachability 라이브러리를 사용 중입니다. Reachability는 확실하지 않은 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; 
     } 
    } 
} 

나는 내 요구 사항에 대해 코드를 조금 변경하여 예/아니오를 반환합니다. 그리고 어느 시점에서 관찰자를 제거해야합니다.

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

감사합니다.

관련 문제