вот решение, когда вы создаете CFHTTPMessage
, вы должны сериализовать его (например, в моем коде я использовал UTF8), а затем записать на сервер.
вот мой пример кода, вы можете следовать этому примеру, он прекрасно работает:
CFHTTPMessageRef myRequest = CFHTTPMessageCreateRequest(kCFAllocatorDefault,CFSTR("POST"), myURL, kCFHTTPVersion1_1);
CFHTTPMessageSetHeaderFieldValue(myRequest, CFSTR("Content-Type"), CFSTR("application/x-www-form-urlencoded"));
CFHTTPMessageSetHeaderFieldValue(myRequest, CFSTR("Content-Length"), (CFStringRef)postLength);
CFHTTPMessageSetBody(myRequest, (CFDataRef)postData); // postData is NSData
dataReadStream = CFReadStreamCreateForHTTPRequest(kCFAllocatorDefault, myRequest);
//// Отсюда есть подключение к серверу
CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault,
(CFStringRef) serverHost,
serverPort,
&dataReadStream,
&dataWriteStream);
if (dataReadStream && dataWriteStream) {
CFReadStreamSetProperty(dataReadStream,
kCFStreamPropertyShouldCloseNativeSocket,
kCFBooleanTrue);
CFWriteStreamSetProperty(dataWriteStream,
kCFStreamPropertyShouldCloseNativeSocket,
kCFBooleanTrue);
iStream = (NSInputStream *)dataReadStream;
[iStream retain];
[iStream setDelegate:self];
[iStream scheduleInRunLoop:[NSRunLoop currentRunLoop]
forMode:NSDefaultRunLoopMode];
[iStream open];
oStream = (NSOutputStream *)dataWriteStream;
[oStream retain];
[oStream setDelegate:self];
[oStream scheduleInRunLoop:[NSRunLoop currentRunLoop]
forMode:NSDefaultRunLoopMode];
[oStream open];
/// Теперь напишите вашу команду на сервер
NSString *content = [NSString stringWithFormat:@"Your Command"];
NSString *req = [NSString stringWithFormat:@"POST /client HTTP/1.1\r\nContent-Length: %d\r\n\r\n%@\r\n", [content length], content];
[oStream write:(const UInt8 *)[req UTF8String] maxLength:strlen((char*)[req UTF8String])];
, затем получите уведомление просто не забудьте забыть добавить в файл заголовка
-(void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode