【问题标题】:How to create an tcp::iostream using an already existing tcp::socket?如何使用已经存在的 tcp::socket 创建 tcp::iostream?
【发布时间】:2017-08-09 10:57:52
【问题描述】:

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

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

【问题讨论】:

    标签: c++ boost boost-asio asio


    【解决方案1】:

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

    #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;
    }
    

    【讨论】:

    • 嗯。我在 Windows 上遇到异常或:assign: The parameter is wrong to std::out
    • 您需要创建一个自包含的示例。通常的问题可能是句柄错误、协议不兼容等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-19
    • 1970-01-01
    • 1970-01-01
    • 2021-03-27
    • 1970-01-01
    • 2021-04-20
    相关资源
    最近更新 更多