如何计算发送/接收的字节数,包括iOS HTTP连接中的TCP/IP开销?

如何计算发送/接收的字节数,包括iOS HTTP连接中的TCP/IP开销?

问题描述:

我正在使用NSURLConnection与服务器执行HTTP通信。我希望了解我的应用程序发送/接收的确切字节数,包括TCP/IP开销。 经过大量研究后,如何实现这一目标还没有找到有用的信息。如何计算发送/接收的字节数,包括iOS HTTP连接中的TCP/IP开销?

我愿意切换到CFStream,如果使用这将帮助我解决这个问题。 在此先感谢。

+0

+1。我有兴趣知道如何在_any_操作系统中执行此操作。 –

在我的控制器的.H我声明了两个瓦尔:

NSMutableData *_data; 
float downloadSize; 

另外别忘了与会代表在.H

@interface SomeViewController : UIViewController <NSURLConnectionDataDelegate, NSURLConnectionDelegate> 

然后在我的.m:

- (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

感谢您的详细回应mashdup。我使用的是完全相同的东西,但不幸的是,由于多个帧和头字节数,这不包括TCP/IP开销。感谢您的输入。 – Elitecoder

+0

没问题,你可以使用里面的方法实现一个下载类,并在完成时调用它的委托等。它们将分别处理每个连接。只要您知道开销有多大,您就可以以字节为单位抵消预期的大小。 – mashdup

+0

其实,这是棘手的部分。开销根据发送的数据大小而变化。它直接关联每个消息被分成的帧的数量。较大的消息将被拆分为更多的帧,从而导致更大的开销。此外,似乎有许多头添加到传输层,但不能通过代理。 – Elitecoder