Esiste qualcosa come "getStreamsToHost" sul dispositivo iPhone reale?
-
03-07-2019 - |
Domanda
Voglio scrivere un NSOutputStream su un server con il codice di esempio di 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];
Questi codici funzionano bene sul simulatore di iPhone, ma quando lo costruisco su un dispositivo reale. Vengono visualizzati due avvisi. Il problema è:
1) classe NSHost non appartiene alla libreria os iphone
2) getStreamsToHost non è stato trovato neanche
Qualche suggerimento per il metodo o la classe alternativi che possono essere utilizzati sul dispositivo reale?
Soluzione
Poiché CFWriteStream è a numero verde su NSOutputStream puoi usare CFStreamCreatePairWithSocketToHost per ottenere la tua coppia di stream:
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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow