CFNetwrok网络请求4
来源:互联网 发布:女生云计算就业前景 编辑:程序博客网 时间:2024/05/16 19:16
//// CFNetworkTest4.m// TestCF//// Created by Jabez on 15/5/11.// Copyright (c) 2015年 John. All rights reserved.//#import "CFNetworkTest4.h"#import <pthread.h>@implementation CFNetworkTest4static CFRunLoopRef backgroundRunLoop;static pthread_cond_t cond = PTHREAD_COND_INITIALIZER;static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;void releaseContext(void *infoPtr) { CFRelease(infoPtr);}void *retainContext(void *infoPtr) { CFRetain(infoPtr); return infoPtr;}void cancelTheStream(CFReadStreamRef readStream) { CFReadStreamUnscheduleFromRunLoop(readStream, CFRunLoopGetCurrent(), kCFRunLoopCommonModes); CFReadStreamClose(readStream); CFRelease(readStream);}void *threadMain(void *info) { pthread_mutex_lock(&mutex); backgroundRunLoop = CFRunLoopGetCurrent(); CFRunLoopSourceContext context = {0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}; CFRunLoopSourceRef source = CFRunLoopSourceCreate(kCFAllocatorDefault, 0, &context); CFRunLoopAddSource(CFRunLoopGetCurrent(), source, kCFRunLoopDefaultMode); pthread_cond_signal(&cond); pthread_mutex_unlock(&mutex); CFRunLoopRun(); return NULL;}void createThread(void) { pthread_t threadID; pthread_create(&threadID, NULL, threadMain, NULL);}void getResponse(CFReadStreamRef readStream, CFStreamEventType type, void *infoPtr) { if (type == kCFStreamEventEndEncountered) { CFHTTPMessageRef response = (CFHTTPMessageRef)infoPtr; CFIndex statusCode = CFHTTPMessageGetResponseStatusCode(response); CFDataRef responseData = CFHTTPMessageCopyBody(response); CFIndex count = CFDataGetLength(responseData); CFStringRef responseJson = CFStringCreateWithBytes(kCFAllocatorDefault, CFDataGetBytePtr(responseData), count, kCFStringEncodingUTF8, YES); NSString *jsonString = [NSString stringWithFormat:@"%@", (__bridge NSString *)responseJson]; NSLog(@"jsongString: %@", jsonString); CFRelease(responseJson); CFRelease(responseData); cancelTheStream(readStream); } else if (type == kCFStreamEventHasBytesAvailable) { UInt8 buffer[100]; CFIndex length = CFReadStreamRead(readStream, buffer, 100); CFHTTPMessageAppendBytes((CFHTTPMessageRef)infoPtr, buffer, length); } else if (type == kCFStreamEventErrorOccurred) { cancelTheStream(readStream); return; }}- (void)sendMessage{ [self request];}- (void)request{ CFStringRef urlString = CFSTR("http://jabez.local/~jabez/test/response/response0"); CFURLRef url = CFURLCreateWithString(kCFAllocatorDefault, urlString, NULL); CFStringRef method = CFSTR("POST"); CFHTTPMessageRef request = CFHTTPMessageCreateRequest(kCFAllocatorDefault, method, url, kCFHTTPVersion1_1); CFHTTPMessageSetHeaderFieldValue(request, CFSTR("Content-Type"), CFSTR("application-json")); CFStringRef jsonBody = CFSTR("key=Test4"); CFDataRef jsonData = CFStringCreateExternalRepresentation(kCFAllocatorDefault, jsonBody, kCFStringEncodingUTF8, 0); CFHTTPMessageSetBody(request, jsonData); CFHTTPMessageRef response = CFHTTPMessageCreateEmpty(kCFAllocatorDefault, NO); CFStreamClientContext context = {0, response, retainContext, releaseContext, NULL}; CFOptionFlags registeredEvent = kCFStreamEventHasBytesAvailable | kCFStreamEventEndEncountered | kCFStreamEventErrorOccurred; CFReadStreamRef readStream = CFReadStreamCreateForHTTPRequest(kCFAllocatorDefault, request); CFReadStreamSetClient(readStream, registeredEvent, getResponse, &context); if (backgroundRunLoop == NULL) { createThread(); pthread_cond_wait(&cond, &mutex); } CFReadStreamScheduleWithRunLoop(readStream, backgroundRunLoop, kCFRunLoopCommonModes); CFReadStreamOpen(readStream); CFRelease(url); CFRelease(urlString); CFRelease(method); CFRelease(request); CFRelease(jsonBody); CFRelease(jsonData);}@end
0 1
- CFNetwrok网络请求4
- CFNetwrok网络请求3
- 网络请求 4中请求方式
- 网络请求
- 网络请求
- 网络请求
- 网络请求
- 网络请求
- 网络请求
- 网络请求
- 网络请求
- 网络请求
- 网络请求
- 网络请求
- 网络请求
- 网络请求
- 网络请求
- 网络请求
- java基础——面向对象(一)
- ORACLE多行合并为一行(row_number,sys_connect_by_path)
- CFNetwork 网络请求方式1
- CFNetwork 网络请求2
- CFNetwrok网络请求3
- CFNetwrok网络请求4
- 训练计划
- HDU2544---最短路(dijkstra&&floyd&&spfa)
- Leetcode: Search in Rotated Sorted Array II
- oracle 回车、换行符
- C++11类(2)构造,清理,复制,移动 Construction, Cleanup, Copy, and Move
- HDU2066---一个人的旅行(Dijkstra&&floyd&&spfa)
- android 布局异常(一)
- 深入理解javascript中的AO对象