我们已经学习了如何从套接字读取和写入数据,不过我们只是简要地提及了这一点。现在是时候学习如何详细进行数据的读取和写入了。在本课中,我们将讨论套接字 I/O 成员函数的工作原理。
套接字的 I/O 成员函数包括 socket::async_send 和 socket::async_receive。实际上,除非你确信需要它们,否则应将这些函数视为低级函数,避免直接在应用程序代码中使用它们。更有可能的情况是,你可以在这些函数之上构建一些库级别的设施。
看一下以下示例。我们已经多次看到类似的示例:
char outgoing[] = "Some outgoing message";
char incoming[256];
auto on_complete = [] (error_code error, std::size_t bytes_transferred)
{
std::cout << error.message() << ", " << bytes_transferred << "\n";
};
socket.async_send(io::buffer(outgoing), on_complete);
socket.async_receive(io::buffer(incoming), on_complete);
到目前为止,一切看起来都很熟悉。关于套接字 I/O 成员函数的主要细微之处在于:当完成处理程序被调用时,并不能保证所有数据都已发送或接收完毕。例如,你可以为长度为 150 字节的缓冲区安排 async_send 操作,该操作可能成功完成,但 bytes_tran
Boost.Asio深入教程:高效读写数据策略
本文详细探讨了使用Boost.Asio库在TCP/IP网络协议下进行套接字I/O操作,尤其是async_send和async_receive的用法。强调了在处理数据传输时,如何确保数据完整性的关键点,包括缓冲区视图的管理和异步操作的链式调用。同时指出,这些底层函数通常用于构建更高层次的I/O设施,而在实际应用中直接使用较少。后续将介绍Boost.Asio提供的更高级I/O功能。
订阅专栏 解锁全文
402

被折叠的 条评论
为什么被折叠?



