read()使用线程在SPP上完成数据

时间:2016-06-01 12:56:57

标签: c++ multithreading bluetooth serial-port spp

我有第三方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,因为它是一个阻塞调用。

请建议。

0 个答案:

没有答案