我无法找到一种方法来制作似乎是使用boost asio库最简单的东西之一:
读取串口中可用的所有数据
例如,在Qt中,readAll()
有一个QextSerialPort
方法。
实际上,我发现的所有示例都是关于读取一定数量的数据或多线程。
在我的情况下,我需要它从GSM控制器读取数据。响应大小取决于发送的命令和控制器上下文,因此我无法指定它。
答案 0 :(得分:1)
您希望transfer_all()
completion condition与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
}
答案 1 :(得分:0)
尝试boost::asio::read(
sock, boost::asio::buffer(buf),
boost::asio::transfer_at_least(1), ec);