2017-08-09 1 views
0

Je ne suis même pas sûr si cette question est logique mais j'essaie de résoudre le problème suivant sans avoir à réécrire de grandes portions de code.Comment créer un tcp :: iostream en utilisant un socket tcp :: déjà existant?

J'ai un serveur tcp qui lit et écrit en utilisant un socket tcp :: avec les fonctions boost :: asio :: async_read_until et boost :: asio :: write. Il y a maintenant un cas d'utilisation pour être capable de diffuser du fichier vers cette socket. tcp :: iostream est le moyen idéal pour cela; puis-je créer une instance de ceci en utilisant le tcp :: socket actuellement ouvert?

Répondre

1

Vous pouvez attribuer la prise sous-jacente comme ceci:

#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

Hmmm. J'obtiens une exception sur Windows ou: assign: Le paramètre est incorrect pour std :: out –

+0

Vous devrez créer un exemple autonome. Les problèmes habituels peuvent être de mauvaises poignées, un protocole incompatible, etc. – sehe