免费注册 查看新帖 |

Chinaunix

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

socket怎么发送结构体? [复制链接]

论坛徽章:
0
跳转到指定楼层
[收藏(0)] [报告]
发表于 2009-10-08 12:44 |只看该作者 |正序浏览
5可用积分
我在写个socket发送数据包的程序,定义了一个包头和一个数据结构体!
就是不知道怎么传送这个结构体…………

论坛徽章:
0
21 [报告]
发表于 2010-10-09 08:50 |只看该作者
结构体只是高级程序语言级的概念,你也可以理解成应用层的概念。

在网络传输的时候都是二进制字节流,根本不区分类型。视频,声音,数据都一样!

所以,只需要将要发送的数据的首地址和长度传给send就可以了

论坛徽章:
0
20 [报告]
发表于 2010-10-08 16:09 |只看该作者
在包头中用一个专门的字段表示此结构的大小,方面对方解析。然后把结构转换成字符数组发出即可。
注意:1、内存对齐 2、字节序 3、两边机器的操作系统位数。

论坛徽章:
0
19 [报告]
发表于 2010-10-06 21:31 |只看该作者
可以用fwrite和fread 这两个二进制I/O ,不过传送二进制数据很不安全,极容易出错

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
18 [报告]
发表于 2010-09-30 11:20 |只看该作者
直接write 就可以了。
对端接收到之后,在强制转换回结构体类型。

论坛徽章:
0
17 [报告]
发表于 2010-09-29 16:31 |只看该作者
我觉得16楼的,才是好方法{:3_197:}

论坛徽章:
0
16 [报告]
发表于 2010-06-13 17:02 |只看该作者
发送结构体就是发送字符数组,但是要考虑大小端问题
  可以参考《linux网络编程》书中讲到了这个问题。
  我这边有电子版,需要的话可以email: woods2001@126.com

论坛徽章:
0
15 [报告]
发表于 2010-06-07 13:35 |只看该作者
自己组织格式自己发,然后自己解析。发送二进制流就行了。
前面一个长度u_int32_t 后面都是u_int8_t的数据流就成。
把结构体转换成流发送

论坛徽章:
0
14 [报告]
发表于 2010-06-06 21:05 |只看该作者
关注..

论坛徽章:
0
13 [报告]
发表于 2010-06-03 10:16 |只看该作者
首先发送和接收方对结构体的对齐方式要相同。
比如一边用了__attribute__ ((packed)) 另一边没用就要出问题了。
其次2个系统的字节序要一致,不一致就要根据要求用hton这些函数转换。
搞定这些,就是把结构体当成个数组,发出去就OK了。

论坛徽章:
0
12 [报告]
发表于 2010-06-02 22:58 |只看该作者
字节对齐,通常用编译指示字强制1字节对其,需要填充的地方用结构体成员显示的填充,我常用这个方法memcpy拷贝到char数组中,发送了,但没有考虑到字节序的问题。
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP