NSURLConnectionを使用してサーバーとのHTTP通信を実行しています。TCP / IPオーバーヘッドを含め、アプリケーションによって送受信された正確なバイト数を知りたいです。多くの研究の結果、これを達成する方法に関する有用な情報は見つかりませんでした。
CFStreamを使用するとこの問題が解決する場合は、CFStreamに切り替えてもかまいません。前もって感謝します。
NSURLConnectionを使用してサーバーとのHTTP通信を実行しています。TCP / IPオーバーヘッドを含め、アプリケーションによって送受信された正確なバイト数を知りたいです。多くの研究の結果、これを達成する方法に関する有用な情報は見つかりませんでした。
CFStreamを使用するとこの問題が解決する場合は、CFStreamに切り替えてもかまいません。前もって感謝します。
コントローラの.hで、2つの変数を宣言します。
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