ブースト シリアライゼーション/asio を使用してネットワーク経由でオブジェクトを送信する正しい方法を理解するのに苦労しています。クラスはmessage
できるだけシンプルに。C++ フレンドリーではなく、私のニーズにも適していません。asio/ser をテストするために一時的にシンプルにしています。
class message {
friend class boost::serialization::access;
public:
message(){}
int type;
int sender;
int assignment;
int nogood;
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & type;
ar & sender;
ar & assignment;
ar & nogood;
}
};
クライアント側では、エージェントがメッセージを送信することを決定すると、TCP 接続を介してサーバーに送信します。
message m;
// do something to generate message
boost::asio::streambuf bufx;
std::ostream os( &bufx );
boost::archive::binary_oarchive ar( os );
ar & m;
boost::asio::write( socket, bufx);
サーバー側のコード:
boost::asio::streambuf bufx;
std::istream is(&bufx);
boost::archive::binary_iarchive ia(is); // <--- Exception: invalid signature
size_t rcx = asio::read(socket,bufx);
message m;
ia >> m;