C#可靠地读取蓝牙流(InTheHand 32feet)

时间:2017-11-02 09:33:24

标签: c# visual-studio bluetooth stream 32feet

我遇到了可靠读取蓝牙流的问题。 这是我第一次使用蓝牙连接。 该应用程序通过蓝牙模块与Arduino进行通信。 它会发送命令并得到回复 例如,响应应该如下所示:
100,200,300,400
这就是我得到的:
1
如果我得到另一个回复(如果它看起来应该完全不同)我会在之前得到其余的回复:
00,200,300,400
有时我甚至得到一个空洞的回应。

以下是我用来读取和写入流的代码:

    void BluetoothClientConnectCallback(IAsyncResult result)
    {
        try
        {
            BluetoothClient client = (BluetoothClient)result.AsyncState;
            client.EndConnect(result);

            NetworkStream stream = client.GetStream();
            stream.ReadTimeout = 1000;

            _frm.printMsg("Connected!", false);

            byte[] receive = new byte[1024];
            while (true)
            {
                while (!ready) ;

                if (stopConnection == true)
                {
                    return;
                }

                try
                {
                    stream.Write(message, 0, message.Length);
                }
                catch
                {
                    _frm.printMsg("Error occurred while writing stream.", true);
                }
                try
                {
                    if (Commands.awaitresponse == true)
                    {
                        Array.Clear(receive, 0, receive.Length);
                        readMessage = "";
                        do
                        {
                            stream.Read(receive, 0, receive.Length);
                            readMessage += Encoding.ASCII.GetString(receive);
                        }
                        while (stream.DataAvailable);

                        _frm.printMsg("Received: " + readMessage, false);
                        Commands.awaitresponse = false;
                    }
                }
                catch
                {
                    _frm.printMsg("Error occurred while receiving stream.", true);
                }
                ready = false;
            }
        }
        catch
        {
            _frm.printMsg("Error occurred while connecting.", true);
        }
    }

我看了一会儿,但无法找到解决方案。

1 个答案:

答案 0 :(得分:2)

经过一些调试和测试后,我自己找到了解决方案 在阅读流之前,我添加了1秒的延迟<GlobalNamingResources> <Resource singleton="false" ..... /> </GlobalNamingResources> 现在所有包都是正确的。