Как выполнить обратный вызов NSStreamDelegate с помощью NSStreamEventOpenCompleted?
Я работал над NSStreamDelegate
, я выполнил обратный вызов, я инициализировал поток ввода и вывода ilke this...
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];
}
Даже после открытия как поток callback(stream:(NSStream *)theStream handleEvent:)
не вызывается с NSStreamEventOpenCompleted
для обоих потоков. Может ли кто-нибудь помочь мне, что я делаю неправильно здесь. Или Каковы возможности NSStreamEventOpenCompleted
не будут вызываться, я видел в документации, если открытие не удалось, оно не будет называть это, если да, то почему открытие потоков не выполняется. Любая идея?
спасибо за вашу помощь.
Ответы
Ответ 1
Я использую очень похожий код, и он отлично работает для меня.
Попробуйте код ниже.
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];
}
Если это не сработает для вас, я могу отправить вам небольшое приложение, которое реализует TCP-клиент и сервер для примера.