2012-10-25 1 views
3

NSURLConnection을 사용하여 서버와의 HTTP 통신을 수행하고 있습니다. TCP/IP 오버 헤드를 포함하여 애플리케이션에서 보내고받은 정확한 바이트 수를 확인하고자합니다. 많은 연구 끝에이를 달성하는 방법에 대한 유용한 정보를 찾지 못했습니다.iOS HTTP 연결에서 TCP/IP 오버 헤드를 포함하여 송수신 된 바이트 수를 계산하는 방법은 무엇입니까?

이 문제를 해결하는 데 도움이된다면 CFStream으로 전환 할 의향이 있습니다. 미리 감사드립니다.

:

또한
NSMutableData *_data; 
float downloadSize; 

가 .H 내하는 .m에서 다음

@interface SomeViewController : UIViewController <NSURLConnectionDataDelegate, NSURLConnectionDelegate> 

에 대표단을 잊지 마세요 : 컨트롤러의 내 .H에서

+0

+1. _any_ 운영 체제에서이 작업을 수행하는 방법에 대해 알고 싶습니다. –

답변

4

나는 두 바르 선언
- (void)connection: (NSURLConnection*) connection didReceiveResponse: (NSHTTPURLResponse*) response 
    { 
     NSInteger statusCode_ = [response statusCode]; 
     if (statusCode_ == 200) { 
      downloadSize = [response expectedContentLength]; 
     } 
    } 
    - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 
     if(!_data) _data = [[NSMutableData data]init]; 
     [_data appendData:data]; 
     progressView.progress = ((float) [_data length]/(float) downloadSize); 
    } 

    - (void)connectionDidFinishLoading:(NSURLConnection *)connection { 
      unsigned char byteBuffer[[_data length]]; 
      [_data getBytes:byteBuffer]; 
      [_data writeToFile:pdfPath atomically:YES]; 

    } 

이것은 내 컨트롤러로 pdf 파일을 다운로드 할 수 있습니다. 그러나 그것은 정말로 아무것도 될 수 있습니다. 응답이있을 때 예상 길이를 얻고 데이터를 수신 할 때마다 변경 가능한 데이터에 추가 한 다음 예상 크기와 비교합니다.

희망 사항 : D

+0

자세한 답변을 주셔서 감사합니다. 나는 똑같은 것을 사용하고 있지만 유감스럽게도 이것은 여러 프레임과 헤더 바이트 수로 인한 TCP/IP 오버 헤드를 포함하지 않습니다. 귀하의 의견을 주셔서 감사합니다. – Elitecoder

+0

문제는 없습니다. 내부에서 이러한 메서드를 사용하여 다운로드 클래스를 구현하고 완료되면 대리자를 호출 할 수 있습니다. 이들은 각 연결을 개별적으로 처리합니다. 오버 헤드가 얼마나 큰지 알면 예상되는 크기를 바이트 단위로 상쇄 할 수 있습니다. – mashdup

+0

실제로, 까다로운 부분입니다. 오버 헤드는 전송 된 데이터의 크기에 따라 변경됩니다. 각 메시지가 분할되는 프레임 수와 직접적으로 관련됩니다. 큰 메시지는 더 많은 수의 프레임으로 분할되어 더 큰 오버 헤드가됩니다. 또한 전송 계층에는 추가되는 헤더가 있지만 대표를 통해 사용할 수는 없습니다. – Elitecoder

관련 문제