1

私は困惑しています。使用可能なバイトがあると考えるオープン NSInputStream があります。バイトを読み取ると、操作は常に 0 を返します。どこでも検索しましたが、私のコードは他のほとんどの人が同じことをしているように見えます。これは非常に低レベルの操作であるため、どのように問題が発生するのかわかりません。さまざまなホストに接続して、これを試しました。また、Wireshark で監視したところ、ホストが書き込みバイトを受信して​​いることがわかりますが、read:maxBytes 操作は常に 0 を返します???

case NSStreamEventHasBytesAvailable:
    {
        //Check stream status
        NSString *returnedStatus;
        commandLength = [commandString length];
        [commandString deleteCharactersInRange:NSMakeRange(0, commandLength)];
        returnedStatus = [NSString stringWithString:[self decodeStatus:[stream streamStatus]]];
        [commandString appendFormat:@"inputStream %@ status=%@\n",stream, returnedStatus];
        [self writeCommand:commandString];


        uint8_t *buf[buffLength];
        NSUInteger len = 0;

        len = [(NSInputStream *)stream read:(uint8_t *)buf maxLength:buffLength];

        if (len == 0) {
            //len = buffLength;
            [self writeCommand:@"No bytes read!\n"];
        }
4

1 に答える 1

5

私もこの問題に遭遇し、ドキュメントで答えを見つけました:

- (BOOL)hasBytesAvailable

戻り値:

受信側に読み取り可能なバイトがある場合は YES、そうでない場合は NO。バイトの可用性を判断するために読み取りを試行する必要がある場合も、YES を返すことがあります。

于 2011-09-28T12:03:17.520 に答える