3

NSURLConnectionを使用してサーバーとのHTTP通信を実行しています。TCP / IPオーバーヘッドを含め、アプリケーションによって送受信された正確なバイト数を知りたいです。多くの研究の結果、これを達成する方法に関する有用な情報は見つかりませんでした。

CFStreamを使用するとこの問題が解決する場合は、CFStreamに切り替えてもかまいません。前もって感謝します。

4

1 に答える 1

4

コントローラの.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

于 2012-10-26T10:12:14.510 に答える