我有一个第三方 Android 应用程序,它使用蓝牙 SPP 连接到我的目标。应用程序发送 JSON 数据,但发送的数据字节数未知,在我的目标接收到的数据也不一致(有时是块),没有行尾来检测发送的数据结束。
我的代码中运行了一个线程来通过串行端口读取数据。
int fd = open(rfcommDevice, O_RDWR | O_NOCTTY | O_SYNC);
void readData(int fd)
{
while (1)
{
nbytes = read(fd, buf, buflen);
if (nbytes < 0)
{
break;
}
else if (nbytes > 0)
{
showCompleteData();
}
else
{
close(fd);
break;
}
}
}
现在 showCompleteData() 首先解析数据,如果发现不完整则失败。由于数据是分块接收的,所以我无法理解如何累积完整数据然后调用 showCompleteData()。
read() 也不返回 0,因为它是一个阻塞调用。
请建议。