3

我找不到一种方法来使 boost asio 库看起来是最简单的事情之一:

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

例如在 Qt 中有一个readAll()方法来自QextSerialPort.

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

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

4

2 回答 2

3

试试这个:

boost::asio::read(
    sock,
    boost::asio::buffer(buf),
    boost::asio::transfer_at_least(1),
    ec
);
于 2017-07-04T06:15:16.590 回答
2

您希望transfer_all()完成条件read()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
}
于 2013-04-02T15:33:20.840 回答