C_and_CPP 板


LINE

開發平台(Platform):linux Linux 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) GCC 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) Ssocket.h 問題(Question): 請問如何傳送struct 其實如果struct內容只是char x[24]固定長度的不會有問題 但因為宣告會有string或不固定大小長度的陣列 想請問有什麼簡單的方法嗎? 例如用idl發送之類的 不曉得該用什麼字眼去Google查詢相關資訊 感恩 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.177.162.146
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1513776209.A.CE7.html
1F:→ stupid0319: 你自己建立的struct的size會千變萬化? 12/20 21:40
2F:→ galic: 介紹你神器 https://lcm-proj.github.io/ 12/20 21:53
3F:→ galic: 這個概念叫做data marshalling 12/20 21:54
4F:→ LiloHuang: 要自己刻就先傳4byte表資料長度,再把剩餘payload送出 12/20 22:19
5F:→ LiloHuang: 也可以在最前面再加上這個私有協定的版本號,用以擴充 12/20 22:20
6F:→ LiloHuang: 記得 network order 跟 host order 也得處理一下 12/20 22:24
7F:→ LiloHuang: 通常稱為 serialization,序列化物件又稱 marshalling 12/20 22:29
8F:→ LiloHuang: 簡單地幫你找了個範例可以參考 https://goo.gl/VQ2dFc 12/20 22:31
9F:→ LiloHuang: 延伸閱讀維基百科 https://goo.gl/kQrPT2 12/20 22:31
10F:→ galic: 應該還是叫做marshalling,serialization是指轉成特定格式 12/20 22:34
11F:→ galic: 像是把memory的資料轉成block形式寫到硬碟就是serialize 12/20 22:35
12F:→ galic: 從硬碟裡面讀出來 轉回記憶體格式讓指標可以操作是 12/20 22:36
13F:→ galic: deserialize 12/20 22:37
14F:→ LiloHuang: 建議你讀一下維基百科第一段,兩種說法都有類似的意思 12/20 22:37
15F:→ LiloHuang: 順便可以看一下 Google Protobuf 的簡介 12/20 22:38
16F:→ galic: 但是marshalling也包含如何deserialize資料 也就是Codebase 12/20 22:43
17F:→ galic: https://stackoverflow.com/questions/770474/ 請參考 12/20 22:44
18F:→ galic: wiki說概念相似的引用資料你怎不看一下? 12/20 22:45
19F:→ galic: 微軟2004的文件只是說到marshalling需要serialize資料 12/20 22:45
20F:→ galic: wiki自己解釋成兩個概念相似 12/20 22:46
21F:→ LiloHuang: 因此我說如果是序列化物件比較適合用 marshalling XD 12/20 22:48
22F:→ LiloHuang: 但這篇文章的作者應該想要轉成 byte stream 12/20 22:48
23F:→ LiloHuang: 所以我會用 serialization 來稱呼這個行為 12/20 22:49
24F:→ LiloHuang: marshalling 相對於 serialization 就是多做了些事 12/20 22:51
25F:→ LiloHuang: 但若僅只用 BSD socket 傳資料未必得多做這麼多事情 12/20 22:52
26F:→ galic: 若是這種需求就用 http://cr.yp.to/proto/netstrings.txt 12/20 22:54
27F:→ LiloHuang: 就像 TCP header 跟 payload 簡單能達成目的也不錯 12/20 22:54
28F:→ LiloHuang: 另外兩個說法類似是個人的經驗,並非指維基百科的內文 12/20 23:00
29F:→ LiloHuang: 比較嚴謹的定義就不重新描述一次了,如有誤解請多包涵 12/20 23:03
30F:→ LiloHuang: 像 Google Protobuf 文件 https://goo.gl/cDfqcS 12/20 23:22
31F:→ LiloHuang: Writing a Message 的說明就是呼叫 Marshal 來做 12/20 23:22
32F:→ LiloHuang: serialize protocol buffer data 這之類的說明 12/20 23:24
33F:推 Killercat: 其實最簡單的做法就是boost::archive 12/21 22:48
34F:→ Killercat: 這個應該是能符合90%情況下最好的marshelling了 12/21 22:49
35F:→ Killercat: 缺點就是檔案很大 XD 12/21 22:49
36F:→ clv: 感謝唷 看看 12/22 19:29







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:e-shopping站內搜尋

TOP