2017-08-09 58 views
0

我甚至不确定这个问题是否有意义,但我试图解决以下问题,而不必重写大部分代码。如何使用已有的tcp :: socket创建一个tcp :: iostream?

我有一个tcp服务器读写使用tcp :: socket与boost :: asio :: async_read_until和boost :: asio :: write函数。现在有一个用例可以从文件流到这个套接字。 tcp :: iostream是做到这一点的理想方式;我可以使用当前打开的tcp :: socket创建一个实例吗?

回答

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; 
} 
+0

嗯。我在Windows上遇到异常或:assign:该参数对std :: out不正确 –

+0

您将需要创建一个自包含的示例。常见问题可能是错误的句柄,不兼容的协议等。 – sehe