c++ - 如何使用已经存在的 tcp::socket 创建一个 tcp::iostream?

标签 c++ boost boost-asio asio

我什至不确定这个问题是否有意义,但我正在尝试解决以下问题而不必重写大部分代码。

我有一个 tcp 服务器,它使用带有 boost::asio::async_read_until 和 boost::asio::write 函数的 tcp::socket 进行读写。现在有一个用例可以从文件流式传输到这个套接字。 tcp::iostream 是执行此操作的理想方式;我可以使用当前打开的 tcp::socket 创建一个实例吗?

最佳答案

您可以像这样分配底层套接字:

#include <boost/asio.hpp>
#include <iostream>
using boost::asio::ip::tcp;

int main() {
    boost::asio::io_service svc;
    tcp::socket s(svc);
    s.connect(tcp::endpoint {{}, 6767});

    tcp::iostream stream;
    stream.rdbuf()->assign(tcp::v4(), s.native_handle());

    std::cout << stream.rdbuf() << std::flush;
}

关于c++ - 如何使用已经存在的 tcp::socket 创建一个 tcp::iostream?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45588766/

相关文章:

c++ - 过滤嵌套动态元组(dynamic tuple of tuples)

c++ - 将 std::get 与枚举类一起使用时需要 static_cast

c++ - Wifi 原始数据传输

c++ - Boost.Spirit 可以在理论上/实践上用于解析 C++(0x)(或任何其他语言)吗?

C++ shared_ptr - 附加到一个新的原始指针?

c++ - 以 boost::bind 作为参数的函数签名(boost::asio 计时器回调)?

c++ - boost_asio_handler_invoke_helpers::invoke 是否仍然是在 boost asio 1.70 中调用完成处理程序的受支持方式?

c++ - 堆栈展开在调用函数和被调用函数之间究竟是如何工作的

qt - 尝试将Qt应用程序与我的静态库链接时存在 undefined reference

c++ - 具有 unique_ptr 捕获的 asio lambda