Есть ли что-нибудь вроде getStreamsToHost на реальном устройстве iPhone?
-
03-07-2019 - |
Вопрос
Я хочу написать NSOutputStream на сервер с примером кода Apple:
NSURL *website = [NSURL URLWithString:str_IP];
NSHost *host = [NSHost hostWithName:[website host]];
[NSStream getStreamsToHost:host port:1100 inputStream:nil outputStream:&oStream];
[oStream retain];
[oStream setDelegate:self];
[oStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[oStream open];
Эти коды хорошо работают на симуляторе iPhone, но когда я собираю их на реальном устройстве.Выскакивают два предупреждения.Проблема в:
1) класс NSHost не принадлежит библиотеке iphone os
2) getStreamsToHost также не найден
Есть какие-нибудь предложения по альтернативному методу или классу, который можно использовать на реальном устройстве?
Решение
Поскольку CFWriteStream бесплатный мостовой переход в NSOutputStream вы можете использовать CFStreamCreatePairWithSocketToHost, чтобы получить пару потоков:
CFReadStreamRef readStream = NULL;
CFWriteStreamRef writeStream = NULL;
CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, (CFStringRef)host, port, &readStream, &writeStream);
if (readStream && writeStream) {
CFReadStreamSetProperty(readStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue);
CFWriteStreamSetProperty(writeStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue);
inputStream = (NSInputStream *)readStream;
[inputStream retain];
[inputStream setDelegate:self];
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[inputStream open];
outputStream = (NSOutputStream *)writeStream;
[outputStream retain];
[outputStream setDelegate:self];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream open];
}
if (readStream)
CFRelease(readStream);
if (writeStream)
CFRelease(writeStream);
Не связан с StackOverflow