Есть ли что-нибудь вроде getStreamsToHost на реальном устройстве iPhone?

StackOverflow https://stackoverflow.com/questions/806116

  •  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);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top