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);
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());