Java串口通信: 如何正确丢弃不需要的数据。

正在使用RXTX写自己的通信协议,目前遇到的一个问题是:A向B发送数据,假设B收到的第i帧的帧头数据校验不通过,B要求A重发,那么我如何正确处理A发过来的第i帧的剩余的数据呢?

帧格式: |--帧类型--|--帧编号(从0开始)--|--数据长度--|--数据--|--帧尾(校验位)--|

采用状态机来解析,假设解析到帧编号的时候,发现这个数值有问题,要求重发,但是缓冲区里还残留着 从数据长度帧尾的这部分数据。

目前采用这种方法来清空:

    while ((available = dataIS.available()) > 0) {
        int read = dataIS.read(new byte[available]);
        try {
            Thread.sleep(200);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

然后清空完成后才向A发送重发的指令,请问有没有什么更好的办法呢?

还有一个问题是: 串口通信中,由于干扰的问题,有可能会存在数据丢失、数据错误,那是否可能会出现数据变多的情况呢?就是比如实际发送100个字节,但是由于干扰变成了101个字节的情况?

阅读 3.4k
1 个回答

确认该帧有问题的时候就应该立即要求重发,不用等到清空之后啊。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题