免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 29881 | 回复: 85
打印 上一主题 下一主题

[C] 请教如何通过socket传struct [复制链接]

论坛徽章:
12
2015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之同曦
日期:2017-03-17 19:13:162016科比退役纪念章
日期:2016-11-07 08:28:12luobin
日期:2016-06-17 17:46:36wusuopu
日期:2016-06-17 17:43:4515-16赛季CBA联赛之福建
日期:2016-01-14 12:49:22程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2015-06-08 22:20:00程序设计版块每日发帖之星
日期:2015-06-08 22:20:002015年亚洲杯之科威特
日期:2015-03-24 14:21:272015年迎新春徽章
日期:2015-03-04 09:57:092016科比退役纪念章
日期:2018-04-10 16:20:18
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-06-17 14:08 |只看该作者 |倒序浏览
如题

论坛徽章:
0
2 [报告]
发表于 2009-06-17 14:09 |只看该作者
你应该先把数据分解成适合网络传送的形态,再在接收端重新组合。
比如用 XML 来表示数据。

论坛徽章:
0
3 [报告]
发表于 2009-06-17 14:15 |只看该作者
tcp的话,首先先序列化(serialization),然后传送。
如果是异构主机,比较麻烦。
要注意双方主机可能有不同的字节序和对齐方式,接收后需要解码。
可以定义一个中间标准(如楼上说的xml),发送方发送前把数据表示为xml格式。接收方接收后,再转换为自己应用程序内部使用的表示形式。

[ 本帖最后由 wishel 于 2009-6-17 14:20 编辑 ]

论坛徽章:
12
2015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之同曦
日期:2017-03-17 19:13:162016科比退役纪念章
日期:2016-11-07 08:28:12luobin
日期:2016-06-17 17:46:36wusuopu
日期:2016-06-17 17:43:4515-16赛季CBA联赛之福建
日期:2016-01-14 12:49:22程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2015-06-08 22:20:00程序设计版块每日发帖之星
日期:2015-06-08 22:20:002015年亚洲杯之科威特
日期:2015-03-24 14:21:272015年迎新春徽章
日期:2015-03-04 09:57:092016科比退役纪念章
日期:2018-04-10 16:20:18
4 [报告]
发表于 2009-06-17 14:15 |只看该作者
如果数据量很大的话那?
我觉得接受之后再组合效率有点低了啊,之前也只么想过的。
要是能直接传 struct 效率会不会高些那?

请指教。

论坛徽章:
12
2015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之同曦
日期:2017-03-17 19:13:162016科比退役纪念章
日期:2016-11-07 08:28:12luobin
日期:2016-06-17 17:46:36wusuopu
日期:2016-06-17 17:43:4515-16赛季CBA联赛之福建
日期:2016-01-14 12:49:22程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2015-06-08 22:20:00程序设计版块每日发帖之星
日期:2015-06-08 22:20:002015年亚洲杯之科威特
日期:2015-03-24 14:21:272015年迎新春徽章
日期:2015-03-04 09:57:092016科比退役纪念章
日期:2018-04-10 16:20:18
5 [报告]
发表于 2009-06-17 14:17 |只看该作者

回复 #3 wishel 的帖子

序列化?
没弄过,能说一下吗?

论坛徽章:
0
6 [报告]
发表于 2009-06-17 14:22 |只看该作者
原帖由 VIP_fuck 于 2009-6-17 14:17 发表
序列化?
没弄过,能说一下吗?


就是线性化,tcp传输不是要求流的格式么。struct可能是结构化的,比如里面有树,链表等。

论坛徽章:
12
2015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之同曦
日期:2017-03-17 19:13:162016科比退役纪念章
日期:2016-11-07 08:28:12luobin
日期:2016-06-17 17:46:36wusuopu
日期:2016-06-17 17:43:4515-16赛季CBA联赛之福建
日期:2016-01-14 12:49:22程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2015-06-08 22:20:00程序设计版块每日发帖之星
日期:2015-06-08 22:20:002015年亚洲杯之科威特
日期:2015-03-24 14:21:272015年迎新春徽章
日期:2015-03-04 09:57:092016科比退役纪念章
日期:2018-04-10 16:20:18
7 [报告]
发表于 2009-06-17 14:27 |只看该作者
没有那些,只是一些数据项。
还需要序列化吗?

论坛徽章:
0
8 [报告]
发表于 2009-06-17 14:30 |只看该作者
需要。
ASP.NET 对服务器控件的处理就用到了序列化,把控件的视图编码保存在一个名为 __VIEWSTATE 的隐藏域中,发送给浏览器,里面有恢复这些控件的所有信息。当浏览器触发了某个事件的时候,事件、新的数据以及之前的 __VIEWSTATE 都被 POST 到服务器上,在服务器端完成整个操作。

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
9 [报告]
发表于 2009-06-17 14:39 |只看该作者
最简单的就是把struct占用的内存数据发过去就可以了,即取结构的地址和长度,只要对方知道这块数据的结构

论坛徽章:
12
2015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之同曦
日期:2017-03-17 19:13:162016科比退役纪念章
日期:2016-11-07 08:28:12luobin
日期:2016-06-17 17:46:36wusuopu
日期:2016-06-17 17:43:4515-16赛季CBA联赛之福建
日期:2016-01-14 12:49:22程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2015-06-08 22:20:00程序设计版块每日发帖之星
日期:2015-06-08 22:20:002015年亚洲杯之科威特
日期:2015-03-24 14:21:272015年迎新春徽章
日期:2015-03-04 09:57:092016科比退役纪念章
日期:2018-04-10 16:20:18
10 [报告]
发表于 2009-06-17 14:45 |只看该作者
sorry,忘记说了,我的程序是 linux C 的,不涉及到 asp.net 啊之类的。
各位就根据这个提提建议吧。


楼上的,你说的那种方法是我之前用的,但是传不过去。现在我改成了分开传,到了另一边之后再组装。有一点麻烦,不过测试的时候就先用它了。

有什么好办法请大家提出来啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP