iOS 正確接收 HTTP chunked 數據的方法
iOS 上的 NSURLConnection 一般能處理絕大部分的 HTTP 請求場景, 不過, 對于一種情況, 它無法處理, 那便是接收 HTTP chunked data. NSURLConnectionDataDelegate 有一個方法, 可以在讀取到部分響應時進行回調, 但是, 數據不是按 HTTP chunked data 來接收的, 它會將多個 chunk 合并到一起.
@protocol NSURLConnectionDataDelegate- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data; @end
沒辦法, 只能使用 cURL for iOS, 在 iComet 的 iOS 例子 里有介紹.
首先, 下載 cURL for iOS: http://seiryu.home.comcast.net/~seiryu/libcurl-ios.html
然后, 把里面的 libcurl.a 引入你的項目, 還要把它的頭文件引入. 注意, cURL 依賴 libz.dylib.
完整代碼:
#include "curl/curl.h" @interface ViewController (){ CURL _curl; } @end // this function is called in a separated thread, // it gets called when receive msg from icomet server size_t icomet_callback(char ptr, size_t size, size_t nmemb, void userdata){ const size_t sizeInBytes = sizenmemb; NSData data = [[NSData alloc] initWithBytes:ptr length:sizeInBytes]; NSString s = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; NSLog(@"%@", s); // beware of multi-thread issue return sizeInBytes; } @implementation ViewController
- (void)viewDidLoad { [self performSelectorInBackground:@selector(startStreaming) withObject:nil]; }
- (void)startStreaming{ const char *url = "http://www.ideawu.net/blog/archives/887.html
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!