免费注册 查看新帖 |

Chinaunix

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

请教:如何在socket中传送和接收结构体?? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-05-06 16:42 |只看该作者 |倒序浏览
如题!!!!
typedef struct aa
{
                unsigned char  save;               
                unsigned short length;               
                unsigned long  msgtype;               
} AA;

论坛徽章:
0
2 [报告]
发表于 2008-05-06 17:06 |只看该作者

回复 #1 bianfz0311 的帖子

CLINET:拼串- 发送
SEVER: 解析- 赋值?

等待高人

论坛徽章:
0
3 [报告]
发表于 2008-05-06 17:19 |只看该作者
typedef struct aa
{
                unsigned char  save;               
                unsigned short length;               
                unsigned long  msgtype;               
} AA;


//发送
AA aa;
memset(&aa,0,sizeof(aa));
aa.save=
aa.length=
aa.msgtype=

char mainbuff[512];
memset(&mainbuff,0,sizeof(mainbuff));
memcpy(&mainbuff,&aa,sizeof(aa));

sendto(socket,mainbuff,.........);

接受
char mainpack[512];
memset(&mainpack,0,sizeof(mainpack));
recvfrom(socket,mainpack,.......);

AA bb;
memset(&bb,0,sizeof(bb));
memcpy(&bb,&mainpack,sizeof(bb));

---------应该是这样吧, 不对 请指点

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2008-05-06 17:25 |只看该作者
要这个东西干吗.?char mainbuff[512];

直接发不行吗.

一般的接收端最好用 ntohs 转一下接收到的数据中的数值

论坛徽章:
0
5 [报告]
发表于 2008-05-06 17:28 |只看该作者
请勿直接传送结构体,因为不同的系统平台整型数字节序和长度可能都是不一样的。

论坛徽章:
0
6 [报告]
发表于 2008-05-06 17:29 |只看该作者
原帖由 eagle518 于 2008-5-6 17:28 发表
请勿直接传送结构体,因为不同的系统平台整型数字节序和长度可能都是不一样的。



论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
7 [报告]
发表于 2008-05-06 17:56 |只看该作者
原帖由 cookis 于 2008-5-6 17:25 发表
要这个东西干吗.?char mainbuff[512];

直接发不行吗.

一般的接收端最好用 ntohs 转一下接收到的数据中的数值

同构平台间,直接发就可以了,不需要 ntohs。
异构平台间,两边 #pragma pack(1),并 htons/ntohs。

论坛徽章:
0
8 [报告]
发表于 2008-05-06 23:19 |只看该作者
告诉你一种方法,用xdr,外部数据表示
功能很强大

论坛徽章:
0
9 [报告]
发表于 2008-05-06 23:29 |只看该作者
如果不考虑效率,可以考虑串行化,这样就不用考虑机器兼容性、移植性问题了

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
10 [报告]
发表于 2008-05-07 00:29 |只看该作者
原帖由 gawk 于 2008-5-6 23:19 发表
告诉你一种方法,用xdr,外部数据表示
功能很强大

xdr 是个很失败的东西。
在我的严重,它就是个垃圾。个人看法,请勿拍砖。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP