免费注册 查看新帖 |

Chinaunix

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

UDP打包及解包问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-02 14:44 |只看该作者 |倒序浏览
第一个问题:
想问下在VC++开发平台下,是否提供了UDP协议打包和解包的接口函数?通常所说的“打包”和“解包”的编程工作,是不是可以这样来理解“要依据自己设计的协议包的格式进行打包和解包的编写工作”?

第二个问题:
定义一个结构体
struct Student{
   char name[20];
   char sex;
};
按照结构体长度的计算方法,name变量占20个字节,sex变量占1个字节,因此Student结构体占21个字节;
但通过cout<<sizeof(Student)<<endl;发现Student实际占用了24个字节。请问这是为什么?结构体内存分配过程和准则是什么?

第三个问题:
如果有一个字符指针变量char *str;对其进行赋值操作str="ab\0cde";然后输出cout<<str<<endl;发现输出结果为ab;想问下这是为什么?难道是
“cout<<”遇到对'\0'后就认为字符串已结束,所以输出只有ab吗?


以上三个问题,请斑竹及高手指点。急!谢谢。。。。

论坛徽章:
0
2 [报告]
发表于 2009-09-02 14:50 |只看该作者
不是 cout 遇到 '\0' 就认为结束,而是标准规定 '\0' 作为字符串的终止符。

论坛徽章:
0
3 [报告]
发表于 2009-09-02 18:17 |只看该作者
1.UDP打包是内核完成,应用层只需组装好用户数据,调用socket API后,由操作系统的UDP协议栈负责组装和解包。
2.我在gcc上试了是21,不是24

论坛徽章:
0
4 [报告]
发表于 2009-09-02 18:32 |只看该作者
结构体字节对齐

论坛徽章:
0
5 [报告]
发表于 2009-09-02 20:36 |只看该作者

回复 #3 gz80 的帖子

请问3楼所说“应用层只需组装好用户数据”是什么意思?能否举例详细说明一下?谢谢!

论坛徽章:
0
6 [报告]
发表于 2009-09-02 20:38 |只看该作者

回复 #4 alexhappy 的帖子

请问4楼结构体对齐的准则是什么?比如:
struct Student{
  char name[20];
  char sex;
  int    age;
  short id;
};
对齐后内存的分配形式是如何的?

论坛徽章:
0
7 [报告]
发表于 2009-09-02 20:41 |只看该作者

回复 #6 leiwang_80 的帖子

似乎改变结构体内部变量类型的排序后,结构体所占内存长度也会发生改变。所以能否详尽阐述下结构体内存对齐的准则是什么?

论坛徽章:
0
8 [报告]
发表于 2009-09-02 23:19 |只看该作者

回复 #7 leiwang_80 的帖子

http://hi.baidu.com/memessenger/ ... 320a226b60fbcd.html
这个地址你可以好好看一下,是关于内存对齐的。

论坛徽章:
0
9 [报告]
发表于 2009-09-03 11:19 |只看该作者
原帖由 leiwang_80 于 2009-9-2 20:36 发表
请问3楼所说“应用层只需组装好用户数据”是什么意思?能否举例详细说明一下?谢谢!


你用UDP协议把一些数据从一台计算机发到另一台计算机,你想要发送的数据就是用户数据,也就是应用层数据,而实际网卡发送的数据已经附加了很多其他数据,通常是链路层协议内容+IP报头+UDP报头+应用层数据,而除应用层数据需要你自己准备之外,其他数据通常都由操作系统自动帮你添加,然后由操作系统负责发送到网卡上,因此你只需要关心应用层数据,详细情况请参考TCP(UDP)/IP协议.

论坛徽章:
0
10 [报告]
发表于 2009-09-03 21:02 |只看该作者
原帖由 lz_fine 于 2009-9-3 11:19 发表


你用UDP协议把一些数据从一台计算机发到另一台计算机,你想要发送的数据就是用户数据,也就是应用层数据,而实际网卡发送的数据已经附加了很多其他数据,通常是链路层协议内容+IP报头+UDP报头+应用层数据,而除应 ...


另问两个问题:
1、这里再进一步详问一下关于使用UDP协议如何将一个结构体变量发送出去,以及如何将接收到的数据转换为结构体变量进一步使用?
2、关于使用UDP协议收发数据,是否要将数据统一转换为字符串发送?能否直接发送结构体变量或者类变量?发送和接收的数据是什么形式?是字节流还是字符流?

请高手指点,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP