Serialization
Can anyone recommend a fast method to serialize a class or struct so it can be send over a socket, and a short example would be nice.
You can send struct or class directly, assuming they don't have any pointers inside, packing is right, byte order is right and they don't have any virtual methods.
To fix any of those problems, copy data you want to send into single buffer, ex. array, and send it.
To fix any of those problems, copy data you want to send into single buffer, ex. array, and send it.
Do you know how to serialize (save) that struct or class to a file?
If so, treat a block of memory as a "file" and "save" it to there. Then send that block as a message over the network.
If so, treat a block of memory as a "file" and "save" it to there. Then send that block as a message over the network.
Ok thanks for the help. Because I'm sending quite large data structures, I decided to use the boost libraries (good choice?). I can send the structs like so;
but how to I receive them on the other end?
std::ostringstream archive_stream;
boost::archive::text_oarchive archive(archive_stream);
archive << myStruct;
sendto(Socket, archive_stream.str().c_str(), sizeof(archive_stream.str().c_str()), 0, (SOCKADDR *) & SockAddr, sizeof(SockAddr));
but how to I receive them on the other end?
I would recommend that you take a look at messagepack, it is used to serialize/deserialize data (for sending over network or storing to file).
http://msgpack.org/
http://msgpack.org/
If you're sending very large data you may want to consider using some light zlib compression as well (if your network performance is suffering), but that's something to do later, once you've got this working.
Remember that 'serialize' is just a fancy word for 'put in a specific order'. If you hold the relevant data in your classes as a member struct then you should have an easier time serializing, since you can just grab that struct from the object.
Remember that 'serialize' is just a fancy word for 'put in a specific order'. If you hold the relevant data in your classes as a member struct then you should have an easier time serializing, since you can just grab that struct from the object.
If the objects you want to send are pure data, you may want to also take look at Google's Protocol Buffers.
The C++ Middleware Writer serializes objects so they can be sent across a network. There are links to examples on the home page.
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement