2009-04-30 6 views
3

Je veux écrire un NSOutputStream à un serveur avec le code exemple de pomme:Existe-t-il quelque chose comme 'getStreamsToHost' sur un appareil iPhone réel?


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]; 

Ces codes fonctionnent bien sur le simulateur d'iPhone, mais quand je le construire à l'appareil réel. Deux avertissements apparaissent. Le problème est:

1) classe NSHost ne fait pas partie à la bibliothèque iphone os

2) getStreamsToHost ne se trouve pas non plus

Toutes les suggestions pour la méthode ou la classe de remplacement qui peuvent être utilisés sur l'appareil réel ?

Répondre

12

Depuis CFWriteStream est toll-free bridged à NSOutputStream vous pouvez utiliser CFStreamCreatePairWithSocketToHost pour obtenir votre paire de flux:

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); 
+0

Merci. Et une autre question: 'kCFStreamPropertyShouldCloseNativeSocket' ne peut pas être trouvé non plus. Devrais-je utiliser 'kCFStreamPropertySocketNativeHandle' à la place ou simplement ne pas définir la propriété pour CFWriteStream? –

+1

Il est là, vous devrez peut-être #include

+0

Voici la [catégorie implémentée] (https://developer.apple.com/library/ios/qa/qa1652/_index.html) par apple. – DanSkeel