我正在编写一些代码来连接到蓝牙设备。对于这个问题,可以认为设备接收任意数量的字节,缓冲它们并在成功时以 0x06 或在失败时以 0x15 响应。
我遇到的问题是接收这些返回字节。
我使用 32feet 库的 BluetoothClient 对象建立与设备的连接。然后我打开一个 NetworkStream 与设备通信,并开始顺序写入字节,然后读取响应。
public int Upload(NetworkStream stream, List<string> hexLines) {
int message = 0;
byte data[] = null;
try {
for (int i = 0; i < hexLines.Count; i++) {
data = Encoding.ASCII.GetBytes(hexLines[i] + "\r");
stream.Write(data, 0, data.Length);
message = stream.ReadByte();
switch(message) {
//Return something depending on response
}
}
catch {
//Do some error handling
}
finally {
//Tidy up
}
}
我期望发生的是 ReadByte() 返回 0x06 或 0x15 之一,仅此而已。我实际上观察到的情况是经常返回 0x11 和 0x13 。鉴于蓝牙设备不发送其他数据,而我只读取一个字节,我对这些意外字节的来源感到困惑。
我发现在写入和读取之间添加一个短的 Thread.Sleep(x) 会导致始终如预期的那样只读取 0x06 或 0x15,但由于这是一个蓝牙应用程序,我不一定知道我可以等待的最短时间并不要不想人为地减慢应用程序的速度。
NetworkStream 上这些额外字节的原因可能是什么?有没有比 Thread.Sleep() 更可靠的方法来避免这个问题?
谢谢你的帮助。