我们如何检测数据是否已成功发送到远程蓝牙设备?第一种方法是删除设备返回一些消息,例如乒乓。此外,我可以在OutputStream.write
方法之前放置计时器,如果超过1分钟并且远程设备没有应答,我们可以得出结论,该消息未被发送以删除设备。同样的方法可能适用于无线通信IEEE 802.11,......还有什么,我错过了什么。
如打印机,耳机等蓝牙设备怎么样?当你发送命令write("commandName")
时,它们都会返回一些消息。当然每个设备都有自己的API,但是有任何关于蓝牙的一般规则或文档规定:对于远程设备的每个命令,设备将以“ok”消息响应,因此我们知道已收到消息。
我搜索了一些API(Android bluetooth,tcp / ip C stack),它们都具有write
方法void write(bytes)
的相同签名。 write
方法也可以阻止吗?或者我们写新的例如write(){ write_(); wait_for_response(); return; }
基本上我问的是向蓝牙设备发送命令的方法以及如何检测它是否成功接收。有哪些常见方法。
答案 0 :(得分:1)
您始终需要收件人的回复,您应确保邮件已到达。此外,您还可以添加数据检查:您创建数据包发送方计算校验和并坚持数据包。收件人收到数据包并计算自己的校验和,如果它与发送者校验和相同,那么数据就可以了。 如何创建数据包的方法更多。固定长度分组数据(例如128字节)或浮动长度数据分组和特殊终止字符序列。我将停止序列与数据和校验和的字节数组合在一起。收件人缓冲区字节,当它找到终结符序列时,找到数据的字节数并从缓冲区中读取它,然后他就可以计算校验和。
示例:
64 61 64 61 00 04 00 09 23 24 25
data0409#$%
#$% - 完成序列(数据包中的固定位置)
09 - 校验和(数据包中的固定位置)
04 - 数据的字节数(数据包中的固定位置)
数据 - 数据(浮动位置为多个字节)
<强>更新强>
重要的是要记住,字节不是连续的,接收器在一个&#34;接纳循环中#34;只能同时接受部分数据包或许多数据包。因此,有必要首先使用数据包系统和接收数据保存在缓冲区中,然后检查数据包的所有字节是否到达。