使用boost库序列化传输对象
来源:互联网 发布:银行数据安全 编辑:程序博客网 时间:2024/05/18 03:34
编写自己的消息结构
以下是我编写的一个简单的消息结构
#ifndef MESSAGE_H#define MESSAGE_H#include <string>//serialization#include <boost/archive/text_oarchive.hpp>//deserialization#include <boost/archive/text_iarchive.hpp>using std::string;//message typeenum MessageOption{ Login, Logout, SendToAll, PrivateChat};struct Message{ friend class boost::serialization::access; //use this function to serialize and deserialize object template<class Archive> void serialize(Archive & ar, const unsigned int version) { ar & sender & receiver & message & option; } string sender; string receiver; string message; MessageOption option;};#endif
注意编写class或者struct时要编写serialize函数
接下来是序列化与反序列化的方法
#ifndef SERIALIZE_H#define SERIALIZE_H#include <string>#include "Message.h"class Serialization{ public: static std::string Serialize(const Message& msg); static Message DeSerialize(const std::string& message);};#endif
#include "Serialization.h"#include <sstream>std::string Serialization::Serialize(const Message& msg){ std::ostringstream archiveStream; boost::archive::text_oarchive archive(archiveStream); archive<<msg; return archiveStream.str();}Message Serialization::DeSerialize(const std::string& message){ Message msg; std::istringstream archiveStream(message); boost::archive::text_iarchive archive(archiveStream); archive>>msg; return msg;}
(三)处理消息
刚才编写的那个消息结构里面有个option,通过这个option我们就可以知道这个对方发过来的消息是要干嘛的
以下是服务器处理客户端消息的函数
template<typename T>void EpollServerSocket<T>::ProcessMessage(Socket& clientSocket){ std::string message; ReceiveMessage(clientSocket,message); T msgStruct=Serialization::DeSerialize(message); switch(msgStruct.option) { case Login : SendMessage(clientSocket,"Login_Success"); break; case Logout: SendMessage(clientSocket,"Logout_Success"); DeleteClient(clientSocket.GetSocketfd()); break; case SendToAll: SendToAllUsers(msgStruct.message); break;
//messages of other type……
default: break;
}}
0 0
- 使用boost库序列化传输对象
- 使用boost库序列化传输对象
- 序列化对象传输
- BOOST.SERIALIZE序列化对象
- Socket传输序列化对象
- Beetle使用Protobuf.net进行对象序列化传输
- Android使用Serializable实现序列化传输对象
- 使用mina2对象传输数据是,传输的数据序列化错误与解决方案
- 对象序列化之Boost.Serialization
- 序列化对象如何接收和传输
- Java Socket传输对象(序列化)
- JSON对象序列化传输格式设置
- android对象实现序列化传输
- aidl ( 六) 加入序列化对象传输
- netty 对象序列化传输示例
- 使用boost 库 将结构struct 序列化
- boost库xml序列化
- boost库xml序列化
- QML ComboBox 图片加文字
- MySQL实现把两行数据合并为一行
- HSV颜色空间
- MFC Combo Box 控件的用法
- leetcode 3. Longest Substring Without Repeating Characters
- 使用boost库序列化传输对象
- oracle 备库归档自动删除脚本
- 当当网的内部框架开源策略案例分享
- JVM介绍
- spring mvc 的 resources 注解 用来处理静态文件
- Android之网络编程
- 积分图像
- Redis分布式客户端-Redisson介绍
- Emacs 自带输入法