使用boost asio读取串口中的所有可用数据

时间:2013-04-02 14:48:32

标签: boost serial-port boost-asio

我无法找到一种方法来制作似乎是使用boost asio库最简单的东西之一:

  

读取串口中可用的所有数据

例如,在Qt中,readAll()有一个QextSerialPort方法。

实际上,我发现的所有示例都是关于读取一定数量的数据或多线程。

在我的情况下,我需要它从GSM控制器读取数据。响应大小取决于发送的命令和控制器上下文,因此我无法指定它。

2 个答案:

答案 0 :(得分:1)

您希望transfer_all() completion conditionread()async_read()免费功能相结合:

boost::array<char, 128> buf;
boost::system::error_code ec;
std::size_t n = boost::asio::read(
    sock, boost::asio::buffer(buf),
    boost::asio::transfer_all(), ec);
if (ec)
{
  // An error occurred.
}
else
{
  // n == 128
}

答案 1 :(得分:0)

尝试boost::asio::read( sock, boost::asio::buffer(buf), boost::asio::transfer_at_least(1), ec);