Как использовать сообщение записи NSOutputStream?

Звучит как проблема с разрешением. Проверьте элементы управления активностью:

https://developers.google.com/assistant/sdk/guides/library/trou устранения#permissions

6
задан Chilly Zhong 1 April 2009 в 01:38
поделиться

1 ответ

Необходимо писать данные только после того, как пространство станет доступным в потоке вывода. Когда поток заканчивает открываться, он не всегда сразу имеет пространство в наличии, таким образом писание в него не будет работать. Если Вы перемещаетесь write звоните в NSStreamEventHasSpaceAvailable обработчик, это должно успешно выполниться.

Кроме того, компьютер на другом конце сокета не имеет никакого способа знать длину данных, которые Вы отправляете. Если Вы не предупреждаете о конце данных путем закрытия сокета, необходимо явно отправить длину данных наряду с данными:

case NSStreamEventHasSpaceAvailable:
{
    if(stream == oStream)
    {
        NSData *data = UIImageJPEGRepresentation(drawImage.image, 90);
        // Convert from host to network endianness
        uint32_t length = (uint32_t)htonl([data length]);
        // Don't forget to check the return value of 'write'
        [oStream write:(uint8_t *)&length maxLength:4];
        [oStream write:[data bytes] maxLength:length];
    }
    break;
}
13
ответ дан 8 December 2019 в 18:41
поделиться