正在使用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个字节的情况?
确认该帧有问题的时候就应该立即要求重发,不用等到清空之后啊。