33

私はに取り組んできましたNSStreamDelegate、私はコールバックを実装しました、私はこれと同じように入力および出力ストリームを初期化しました...

    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、ドキュメントで見たように、呼び出されない可能性は何ですか。開くことが失敗した場合、これは呼び出されません。そうであれば、なぜストリームを開くことが失敗するのですか。何か案が?

ご協力いただきありがとうございます。

4

2 に答える 2

0

私は非常によく似たコードで使用していますが、うまく機能します。以下のコードを試してください。

   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 クライアントとサーバーを実装した小さなアプリをお送りします。

于 2015-05-26T20:04:15.567 に答える