蓝牙或wifi流(spp)是否会丢失字节或损坏字节?

Nik*_*kyD 7 android bluetooth wifi spp

多年来困扰我的事情.我使用了很多蓝牙和最近的wifi流(spp).这些流始终连接到特定设备,并通过简单的字节命令进行通信.

一些设备(他们的微控制器)我自己编程,我必须始终检查线上的信号是否是我所期望的,发送和检查crcs.

不知何故,我想在我的智能手机上做同样的事情,因为我用"readByte"访问我的流并逐字节读取,我总是想知道是否实际上可能a)消息中的一个字节可能丢失b)消息到达混合或"不按顺序"

我不知道底层硬件有多少功能.它是否使用crc检查每条消息,并在消息损坏时再次请求消息?或者它是否盲目地将每个字节传递给我的"readByte"方法?

如果设备发送消息a然后b,是否有可能接收器在a之前接收b并在传递我的代码b之前或甚至混合像拉链这样的字节并给我一个[0]然后b [0]然后a [1]等等.

我应该对这些流有多少信任?一些澄清将不胜感激

wea*_*ase 7

我觉得你可以睡得很好。基于分组交换网络的WiFi和蓝牙,每个分组都带有crc,物理层内置拥塞和链路质量控制——所以,除了极罕见的固件错误外,它实际上比有线串行连接更可靠。

换句话说 - 纠错发生的级别低于您使用的级别。

关于数据包到达顺序问题的答案:点对点协议不受此问题的影响。当它们通过不同的路由时会发生数据包重新排序,因此在没有其他路由时没有问题。

如果您在这些协议上使用面向字节的流,您将以相同的顺序获得相同的字节,因为它们的设计考虑到了这个目标。另一方面,数据包访问不是,但 Android 没有为您提供使用它的方法。