Bluetooth SPP を使用してターゲットに接続するサードパーティの Android アプリケーションがあります。アプリケーションは 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 を返しません。
提案してください。