Подтвердить что ты не робот

Как выполнить обратный вызов 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 не будут вызываться, я видел в документации, если открытие не удалось, оно не будет называть это, если да, то почему открытие потоков не выполняется. Любая идея?

спасибо за вашу помощь.

4b9b3361

Ответ 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-клиент и сервер для примера.