編集:私は以下の私の答えを取り戻します、私が提案したものは文字列ストリームソリューションよりも時間とスペースの利点がありますが、asio :: stream APIには長期的に必要となるいくつかの重要な機能が欠けています(例えば、時限中断)。
私の最初の答え:
boost :: asioからのストリームを使用します。これは、std :: stringstreamsに書き込んでから一度に送信するよりも、時間とスペースに利点があります。方法は次のとおりです。
クライアントコード:
boost::asio::ip::tcp::iostream stream("localhost", "3000");
if (!stream)
throw std::runtime_error("can't connect");
サーバーコード:
boost::asio::io_service ios;
boost::asio::ip::tcp::endpoint endpoint
= boost::asio::ip::tcp::endpoint(ip::tcp::v4(), 3000);
boost::asio::ip::tcp::acceptor acceptor(ios, endpoint);
boost::asio::ip::tcp::iostream stream;
// Your program stops here until client connects.
acceptor.accept(*stream.rdbuf());
次に、クライアントストリームまたはサーバーストリームのいずれかに接続した後、次の手順を実行します。
MyDataType obj;
// Send the object.
boost::archive::text_oarchive archive(stream);
archive << obj;
// Or receive it.
boost::archive::text_iarchive archive(stream);
archive >> obj;
もちろん、Tymekが回答に書いたように、MyDataTypeに「serialize」関数を追加する必要があります。