我找不到一种方法来使 boost asio 库看起来是最简单的事情之一:
读取串行端口中的所有可用数据
例如在 Qt 中有一个readAll()
方法来自QextSerialPort
.
实际上,我发现的所有示例都是关于读取一定数量的数据或多线程的。
就我而言,我需要它从 GSM 控制器读取数据。响应大小取决于发送的命令和控制器上下文,因此我无法指定它。
我找不到一种方法来使 boost asio 库看起来是最简单的事情之一:
读取串行端口中的所有可用数据
例如在 Qt 中有一个readAll()
方法来自QextSerialPort
.
实际上,我发现的所有示例都是关于读取一定数量的数据或多线程的。
就我而言,我需要它从 GSM 控制器读取数据。响应大小取决于发送的命令和控制器上下文,因此我无法指定它。
试试这个:
boost::asio::read(
sock,
boost::asio::buffer(buf),
boost::asio::transfer_at_least(1),
ec
);
您希望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
}