PTT
Submit
Submit
选择语言
正體中文
简体中文
PTT
C_and_CPP
[问题] socket传struct
楼主:
clv
(慢慢習慣æˆç‚ºå¤§å”)
2017-12-20 21:23:27
开发平台(Platform):linux
Linux
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
GCC
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
Ssocket.h
问题(Question):
请问如何传送struct
其实如果struct内容只是char x[24]固定长度的不会有问题
但因为宣告会有string或不固定大小长度的阵列
想请问有什么简单的方法吗?
例如用idl发送之类的
不晓得该用什么字眼去Google查询相关资讯
感恩
作者:
stupid0319
(征女友)
2017-12-20 21:40:00
你自己建立的struct的size会千变万化?
作者:
galic
(嘎利)
2017-12-20 21:53:00
介绍你神器
https://lcm-proj.github.io/
这个概念叫做data marshalling
作者: LiloHuang (十年一刻)
2017-12-20 22:19:00
要自己刻就先传4byte表资料长度,再把剩余payload送出也可以在最前面再加上这个私有协定的版本号,用以扩充记得 network order 跟 host order 也得处理一下通常称为 serialization,序列化物件又称 marshalling简单地帮你找了个范例可以参考
https://goo.gl/VQ2dFc
延伸阅读维基百科
https://goo.gl/kQrPT2
作者:
galic
(嘎利)
2017-12-20 22:34:00
应该还是叫做marshalling,serialization是指转成特定格式像是把memory的资料转成block形式写到硬盘就是serialize从硬盘里面读出来 转回内存格式让指标可以操作是deserialize
作者: LiloHuang (十年一刻)
2017-12-20 22:37:00
建议你读一下维基百科第一段,两种说法都有类似的意思顺便可以看一下 Google Protobuf 的简介
作者:
galic
(嘎利)
2017-12-20 22:43:00
但是marshalling也包含如何deserialize资料 也就是Codebase
https://stackoverflow.com/questions/770474/
请参考wiki说概念相似的引用资料你怎不看一下?微软2004的文件只是说到marshalling需要serialize资料wiki自己解释成两个概念相似
作者: LiloHuang (十年一刻)
2017-12-20 22:48:00
因此我说如果是序列化物件比较适合用 marshalling XD但这篇文章的作者应该想要转成 byte stream所以我会用 serialization 来称呼这个行为marshalling 相对于 serialization 就是多做了些事但若仅只用 BSD socket 传资料未必得多做这么多事情
作者:
galic
(嘎利)
2017-12-20 22:54:00
若是这种需求就用
http://cr.yp.to/proto/netstrings.txt
作者: LiloHuang (十年一刻)
2017-12-20 22:54:00
就像 TCP header 跟 payload 简单能达成目的也不错另外两个说法类似是个人的经验,并非指维基百科的内文比较严谨的定义就不重新描述一次了,如有误解请多包涵像 Google Protobuf 文件
https://goo.gl/cDfqcS
Writing a Message 的说明就是呼叫 Marshal 来做serialize protocol buffer data 这之类的说明
作者:
Killercat
(杀人猫™)
2017-12-21 22:48:00
其实最简单的做法就是boost::archive这个应该是能符合90%情况下最好的marshelling了缺点就是档案很大 XD
楼主:
clv
(慢慢習慣æˆç‚ºå¤§å”)
2017-12-22 19:29:00
感谢唷 看看
继续阅读
[问题] 以矩阵方式列出字串
Dong0129
[问题] c++读档问题
nckutaeyeon
[问题] 实作BST和while(1)的用法
Brothre23
[问题] 有关于 return local variable
gowrite
[问题] 资结圣经版
nova06091
[问题]visual c++ community 2017找不到win32
taimali
[问题]二元树删除左右皆有子树的节点
sdfg014025xx
[问题] scanf输入一串逗号隔开的数字问题
xjpjeass
[问题]关于fwrite之函式使用疑问
CannyRowFour
Re: [问题] 找出句子中最长的单字(C++)
peterwu4
Links
booklink
Contact Us: admin [ a t ] ucptt.com