网络传输对象的序列化,反序列化

dreameren 2012-11-30 10:32:13
在做网络传输消息的程序。为了适应不同的平台,我想将对象序列化,后再传输,另一端进行反序列化。
但是这样问题就来了,反序列化的时候,不知道反序列化的类型,而且关于多态对象,更是棘手。而且
如何确保一个对象完成的传输过来。
大家有没有成熟的做法?
...全文
277 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
dreameren 2012-11-30
  • 打赏
  • 举报
回复
我是不是有些概念混淆。 接收对象数据的,叫做传输协议。比如:长度+对象数据,得到完整长度后,再解析对象。
dreameren 2012-11-30
  • 打赏
  • 举报
回复
引用 3 楼 jwybobo2007 的回复:
看看protobuf google开源的库,帮你实现序列化反序列化,跨平台的
哥们留步。我看过JAVA那种反序列化,直接从SOCKET流中就把对象反序列出来了。 好像有什么MAGIC。 我的思路是,用SOCKET,按长度+数据,读出完整对象后反序列化。 但是看看JAVA的实现,貌似没有什么保证传输完整对象的概念。 很纠结啊。
jwybobo2007 2012-11-30
  • 打赏
  • 举报
回复
看看protobuf google开源的库,帮你实现序列化反序列化,跨平台的
dreameren 2012-11-30
  • 打赏
  • 举报
回复
引用 1 楼 sg_knight 的回复:
感觉网络传输还是协议靠谱,你序列化了就跟次序有关了,但网络传输发送顺序是不能保证的,有可能后发的数据先到了,接收端收到的数据顺序就错了。
发送次序肯定要保证的。我现在的方法是,长度 + 数据 ,对方收到后,处理数据。 本来有考虑过用序列化/反序列化的方法,但是没有成熟的想法。尤其是多态对象,没有办法反序列化。
sg_knight 2012-11-30
  • 打赏
  • 举报
回复
感觉网络传输还是协议靠谱,你序列化了就跟次序有关了,但网络传输发送顺序是不能保证的,有可能后发的数据先到了,接收端收到的数据顺序就错了。
I_ask_who 2012-11-30
  • 打赏
  • 举报
回复
引用 8 楼 dreameren 的回复:
引用 7 楼 mcmcmc 的回复: boost::serialize库可以把对象序列成二进制或xml串,然后传给socket,接收方如果是同一语言写的就能反序列,且支持继承,不过被序列的类要加一点代码...被序列的类型可以通过约定的数字符号夹在数据前面. BOOST这种方法,比较不好用。 你一般是怎么序列化的。在SOCKET流中可能有几个对象。那么怎么反序列化?这是我最纠结的地方。 我感……
一个大类,里面有vector<>,list<>等成员,boost就能序列化,将一个协议封装成一个类,只要在前面加上这个类的类型和长度,然后接收方只要序列化一个类就可以,而不是多个,只要你不是指针对象就可以(据说也能处理)... 我曾将一幅曲线图的数据,打包成链表传递出去,用的就是boost...
dreameren 2012-11-30
  • 打赏
  • 举报
回复
引用 7 楼 mcmcmc 的回复:
boost::serialize库可以把对象序列成二进制或xml串,然后传给socket,接收方如果是同一语言写的就能反序列,且支持继承,不过被序列的类要加一点代码...被序列的类型可以通过约定的数字符号夹在数据前面.
BOOST这种方法,比较不好用。 你一般是怎么序列化的。在SOCKET流中可能有几个对象。那么怎么反序列化?这是我最纠结的地方。 我感觉是不能反序列化,除非读出一个对象,反序列化一个,再读一个,再反序列化一个。我的理解正确吗?
I_ask_who 2012-11-30
  • 打赏
  • 举报
回复
boost::serialize库可以把对象序列成二进制或xml串,然后传给socket,接收方如果是同一语言写的就能反序列,且支持继承,不过被序列的类要加一点代码...被序列的类型可以通过约定的数字符号夹在数据前面.
jwybobo2007 2012-11-30
  • 打赏
  • 举报
回复
引用 4 楼 dreameren 的回复:
引用 3 楼 jwybobo2007 的回复:看看protobuf google开源的库,帮你实现序列化反序列化,跨平台的 哥们留步。我看过JAVA那种反序列化,直接从SOCKET流中就把对象反序列出来了。 好像有什么MAGIC。 我的思路是,用SOCKET,按长度+数据,读出完整对象后反序列化。 但是看看JAVA的实现,貌似没有什么保证传输完整对象的概念。 ……
那你可以看看这个库的用法,可以直接对你定义的结构进行自动序列化反序列化

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧