为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

扬帆大鱼 2019-01-18 09:51:03
正在使用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个字节的情况?
查看完整描述

1 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

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

查看完整回答
反对 回复 2019-03-01
  • 1 回答
  • 0 关注
  • 660 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号