Xamarin формы - InputStream потеряет несколько укусов, не будет читать все данные - PullRequest
0 голосов
/ 16 апреля 2020

Я начинающий программист, но мне нравятся испытания. Во время этих испытаний я столкнулся с проблемой.

Я создаю устройство на основе Raspberry Pi, хочу управлять им со смартфона. Выбор пал на связь через Bluetooth. Я без проблем соединяю и соединяю два устройства, отправляю данные из Android в RPi без проблем. Проблема возникает при отправке данных из RPi, короткие сообщения отправляются правильно, но при отправке большего количества данных возникает проблема. InputStream теряет 990 байт, я заметил, что один пакет данных - это столько же байтов.

Вот мой код

        public static void ListenForData()
    {
        InStream = socket.InputStream;
        byte[] dataBuffer = new byte[1024];
        int dataBytes;
        while (true)
        {
            byte[] fileBuffer;
            try
            {
                using (var ms = new MemoryStream())
                {
                    while (InStream.CanRead || InStream.IsDataAvailable())
                    {
                        dataBytes = InStream.Read(dataBuffer);
                        ms.Write(dataBuffer, 0, dataBytes);
                        fileBuffer = ms.ToArray();
                        File.WriteAllBytes(Path + "c.jpg", fileBuffer);
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                break;
            }
        }
    }

Я использую пример BluetoothChat для отправки сообщений, и он работает в их случае, но отправка изображения, например, приводит к ошибке, описанной выше.

1 Ответ

0 голосов
/ 16 апреля 2020

Я нашел решение. Оказалось, что я запускаю поток прослушивания дважды. В двух местах, и только в одном, я добавил опцию, чтобы проверить, работает ли поток. После исправления этой ошибки все работает.

...