socket 可以传输结构体吗?

2023-06-13 09:48:24 +08:00
 sbldehanhan

例如: 结构体: struct test { int a; char b[1024]; float c; }; 数据: struct test data; 发送: send(sockfd, &data, sizeof(data), 0); 接收: recv(connfd, &data, sizeof(data), 0);

5228 次点击
所在节点    C
50 条回复
duke807
2023-06-13 12:52:29 +08:00
@Monad

因为用起来超级麻烦啊

msgpack 和 json 可以无缝切换,扩展性比 json 好,性能更高
ysc3839
2023-06-13 13:35:02 +08:00
@byaiu 因为有些教程误人子弟,硬是认为 TCP 发送的是数据包,接收时会“粘在一起”,然而 TCP 传的是字节流,本来就是连续的。
这就好比有个教程说,文件会“粘块”,写入文件时分两次写入了两块,下次读的时候会粘成一块读出来。
tomychen
2023-06-13 13:42:10 +08:00
粘包警出列
DreamSpace
2023-06-13 14:14:20 +08:00
@bthulu 如果有生物体可用的序列化 /反序列化方式的话,感觉也不是不行啊。
Jirajine
2023-06-13 14:26:00 +08:00
你的结构体不要太大,并且全部都是 inline 的字段,不要包含指针 /引用。
两边的程序和系统架构也要是一样的。
之前看到一个用 zig 写的分布式数据库就是这样做的,极致的 kiss ,cast bytes without parse.
MeteorCat
2023-06-13 14:26:05 +08:00
每种语言都有序列化对象方法吧
MrKrabs
2023-06-13 16:02:06 +08:00
同一平台确实无所谓
siweipancc
2023-06-14 10:04:47 +08:00
网络 io 不也是 socket 吗。
sbldehanhan
2023-06-14 14:12:28 +08:00
@kagetu 讲的很好。感谢。
alqaz
2023-10-25 13:44:41 +08:00
可以,考虑字节序和对其就行了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/948216

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX