2017-08-09 59 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