【发布时间】:2017-05-19 04:48:18
【问题描述】:
我已经在此处查看了有关此主题的几个问题,但没有任何问题可以为我提供解决方案。
在 VM 上进行测试时,我收到了长度为 47、80 或 31 个字符的传入数据。
串口的readyRead连接到:
void MainWindow::readData(){
QString buf;
myByteArray = serial->readAll();
for(int i = 0; i < myByteArray.size(); ++i){
if(myByteArray.at(i) == '\n'){
buf.append(myByteArray.at(i));
qDebug() << buf << endl;
buf.clear();
else{
buf.append(myByteArray.at(i));
}
我知道每条消息都以“\r\n”结尾,所以我们用它作为结束当前消息的点。
我遇到的问题是我可能每 50 次收到一条干净的消息。它左右丢字符。我有一个文本文件,显示通过串行发送的消息,因此我可以与收到的内容进行比较,令人作呕的是它们的偏离程度。
我已经尝试了 readLine() 以及其他线程中的其他几个建议,结果总是相同。
我的想法是检查收到的消息是否与我期望的长度(47、80 或 31 个字符)匹配,然后忽略不匹配的消息。问题是我每 2 分钟会收到一条真正干净的消息……也许吧。
如果我一收到数据就将通过网络传输的内容转储出来,结果与我缓冲数据时的结果并没有什么不同。
我遇到的另一个问题是我收到的每条消息,我总共错过了大约 3-4 条。
关于如何更好地处理这个问题有什么建议吗?
【问题讨论】: