NSInputStream прочитал: maxBytes всегда возвращает 0 - PullRequest
1 голос
/ 14 июля 2011

Я сбит с толку.У меня есть открытый 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"];
        }

1 Ответ

5 голосов
/ 28 сентября 2011

Я также столкнулся с этой проблемой, и я нашел ответ в документации:

- (BOOL)hasBytesAvailable

Возвращаемое значение:

ДА, если у получателя есть байты, доступные для чтения, в противном случае НЕТ. Может также возвращать ДА, если необходимо выполнить чтение для определения доступности байтов.

...