用户
 找回密码
 立即注册

33

主题

96

帖子

1811

积分

金牌会员

Rank: 6Rank: 6

积分
1811
发表于 2019-5-29 00:07:33
各位专家,

请教一个问题,我在使用4.7的蓝牙插件,成功连接到外部的一个蓝牙透传模块,该模块然后经由一个USB接口与电脑相连,在电脑上安装USB转串口的驱动,将它识别成一个串口。
这样在电脑侧,我写了一个串口的程序,这样在程序上可以发出数据包,经过蓝牙模块发送到APP上。

现在我的问题是,当我在电脑侧发送一个数据包,比如说一次发送一个字符串“23”,但在APP上收到的数据有时候是1个数据包“23”,有时候是两个数据包“2” 和“3”,这个似乎是随机出现的。我的电脑侧的发包程序如下:
            for(int i = 0; i< 100; i++)
            {
                byte[] WriteBuffer = Encoding.UTF8.GetBytes(i.ToString());
                //将数据缓冲区的数据写入到串口端口
                ComPort.Write(WriteBuffer, 0, WriteBuffer.Length);
                System.Threading.Thread.Sleep(10);
            }

在APP侧,接收代码如下 (代码中的bluetooth1_DataReceived 是 bluetooth插件的 DataRecieved 触发事件)
        private void bluetooth1_DataReceived(object sender, Smobiler.Plugins.BluetoothDataReceivedEventArgs e)
        {
            textBox1.Text += System.Text.Encoding.GetEncoding("utf-8").GetString(e.Data) + "+";
        }



通过看text Box1中的内容大致如下(每次都不一样)
    1+2+3+4+5+6+7+8+9+10+1+1+12+13+1+4+1+5+16+17  .....

相反,从APP中发出的数据包, 可以正确的在电脑侧串口接收程序中正确还原。

我自己猜测是由于一个进入的数据包由于网络的时延,多次触发了蓝牙插件的接收事件。不知道是不是这样。

不知道哪位之前用蓝牙通信的时候,遇到过类似的情况?有何解决的办法?

另外想进一步了解一下,Smobiler的这种服务器+客户端的模式,在处理实时性要求比较高的数据(比如说毫秒级)时候,会不会受制于网络(局域网或公网)的响应速度?

谢谢
大杰米
分享至 : QQ空间
0 人收藏
使用道具 举报 回复
发表于 2019-5-29 10:49:06
由于网络与数据发送机制的问题,传输内容是有可能出现接收延迟的,建议发送的数据协议中添加数据长度等协议(比如发送时,第1个byte为长度,后面接数据,最后加个0为结束标识等),组合成一个完整的协议内容,进行数据校验
使用道具 举报 回复 支持 反对
发表于 2019-5-29 17:27:07
谢谢指点。
使用道具 举报 回复
发新帖
您需要登录后才可以回帖 登录 | 立即注册