Comment envoyer ostream via boost sockets en C ++?

Je suis confronté à des problèmes avec ma communication inter-processus utilisant Protobuf Protobuf permet un ensemble de formats de sérialisation:

SerializeToArray(void * data, int size) : bool SerializeToCodedStream(google::protobuf::io::CodeOutputStream * output) : bool SerializeToFileDescriptor(int file_descriptor) : bool SerializeToOstream(ostream * output) 

Mon problème est que je ne sais pas comment l’utiliser avec les sockets boost asio que j’utilise, car je les ai implémentées pour envoyer des chaînes:

 boost::asio::write(socket, boost::asio::buffer(message), boost::asio::transfer_all(), ignored_error); 

Mais je voudrais envoyer le ostream.

La bibliothèque asio de Boost s’intègre à idStream au niveau des filtres à vapeur

Alors écris une demande

 boost::asio::streambuf request; std::ostream request_stream(&request); request_stream << "GET " << argv[2] << " HTTP/1.0\r\n"; request_stream << "Host: " << argv[1] << "\r\n"; request_stream << "Accept: */*\r\n"; request_stream << "Connection: close\r\n\r\n"; // Send the request. boost::asio::write(socket, request); 

Lire une réponse:

 boost::asio::streambuf response; boost::asio::read_until(socket, response, "\r\n"); // Check that response is OK. std::istream response_stream(&response); 

Copier un stream:

 boost::asio::streambuf request; std::ostream request_stream(&request); request_stream << std::cin.rdbuf() << std::flush; // Send the request. boost::asio::write(socket, request); 

Qu’en est-il de l’utilisation d’ossortingngstream?

 ossortingngstream oss; oss << "hello world"; std::string str(oss.str());