ios - ¿Cómo llamar a NSStreamDelegate con NSStreamEventOpenCompleted?
iphone cocoa-touch (1)
He estado trabajando en un NSStreamDelegate
, he implementado la devolución de llamada, he inicializado el flujo de entrada y salida en este ...
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStringRef host = CFSTR("74.125.224.72");
UInt32 port = 2270;
CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, host, port, &inputStream, &writeStream);
if (writeStream && inputStream) {
inputStream = (__bridge NSInputStream *)readStream;
[inputStream setDelegate:self];
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[inputStream open];
outputStream = (__bridge NSOutputStream *)writeStream;
[outputStream setDelegate:self];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream open];
}
Incluso después de abrir tanto la callback(stream:(NSStream *)theStream handleEvent:)
flujo callback(stream:(NSStream *)theStream handleEvent:)
no se llama con NSStreamEventOpenCompleted
para ambos flujos. ¿Puede alguien ayudarme? ¿Qué estoy haciendo mal aquí? O ¿Cuáles son las posibilidades que no se llamará a NSStreamEventOpenCompleted
He visto en la documentación, si la apertura falló, no llamará a esto, si es así, ¿por qué falla la apertura de flujos? ¿Alguna idea?
gracias por tu ayuda.
Lo uso con un código muy similar y funciona bien para mí. Pruebe el siguiente código.
NSString* host = @"192.168.2.105";
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
UInt32 port = 8008;
CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, (__bridge CFStringRef)(host), port, &readStream, &writeStream);
if (writeStream && readStream) {
self.InputStream = (__bridge NSInputStream *)readStream;
[self.InputStream setDelegate:self];
[self.InputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[self.InputStream open];
self.OutputStream = (__bridge NSOutputStream *)writeStream;
[self.OutputStream setDelegate:self];
[self.OutputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[self.OutputStream open];
}
Si no funciona para usted, puedo enviarle una pequeña aplicación que implementa el cliente y el servidor TCP, por ejemplo.