免费注册 查看新帖 |

Chinaunix

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

C语言使用struct 发送数据乱码 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-06-24 11:05 |只看该作者 |倒序浏览
    struct Header {
        char *Header;
        char *Host;
        char *Ua;
        char *Al;
        char *Ae;
        char *Ac;
        char *keep;
        char *Con;
    };



使用这样的struct模拟一个HTTP包。发送的时候用(-mydata就是我的结构体)
send(sockfd, (char *)&_mydata, sizeof(_mydata), 0);

但不知道为什么用wireshark抓包是这样,大侠帮忙解决下。

小图.jpg (12.17 KB, 下载次数: 49)

小图.jpg

论坛徽章:
0
2 [报告]
发表于 2009-06-24 11:09 |只看该作者
我是用_mydata.Header = "GET / HTTP/1.1\r\n"填充内容的。

论坛徽章:
0
3 [报告]
发表于 2009-06-24 11:13 |只看该作者
你这个struct全是指针,没有半点实质上的内容。
32位机器一个指针4字节,估计就是乱码。
   struct Header {
        char *Header;
        char *Host;
        char *Ua;
        char *Al;
        char *Ae;
        char *Ac;
        char *keep;
        char *Con;
    };

论坛徽章:
0
4 [报告]
发表于 2009-06-24 11:16 |只看该作者
原帖由 mgqw 于 2009-6-24 11:13 发表
你这个struct全是指针,没有半点实质上的内容。
32位机器一个指针4字节,估计就是乱码。
   struct Header {
        char *Header;
        char *Host;
        char *Ua;
        char *Al;
        ...



大侠指点下。如果模拟一个HTTP头应该怎么样定义结构呢?谢谢。

论坛徽章:
0
5 [报告]
发表于 2009-06-24 11:19 |只看该作者
把字符指针换成字符数组。。。前几天貌似有关于这个问题的帖子,LZ搜一下

论坛徽章:
0
6 [报告]
发表于 2009-06-24 11:22 |只看该作者
原帖由 鬼才小科 于 2009-6-24 11:16 发表



大侠指点下。如果模拟一个HTTP头应该怎么样定义结构呢?谢谢。

我不是大侠,直是对这个东西稍微有点接触,稍微改下你这个结构体就行了,长度自己定义
   struct Header {
        char Header·[8];
        char Host[8];
        char Ua[8];
        char Al[8];
        char Ae[8];
        char Ac[8];
        char keep[8];
        char Con[8];
    };
还有我记得网络包好像是把结构体当字符串发送的,因此结构体内的字符串不能有'\0'结束符,必须用其他字符填满。
解包的时候再还原

论坛徽章:
0
7 [报告]
发表于 2009-06-24 11:23 |只看该作者
原帖由 alexhappy 于 2009-6-24 11:19 发表
把字符指针换成字符数组。。。前几天貌似有关于这个问题的帖子,LZ搜一下



谢谢。我想过。但我觉得如果使用数组大小必须先确定。数组小了会越界,如果大了就浪费。所以我想采用这种指针的方式。

论坛徽章:
0
8 [报告]
发表于 2009-06-24 11:28 |只看该作者
原帖由 鬼才小科 于 2009-6-24 11:23 发表



谢谢。我想过。但我觉得如果使用数组大小必须先确定。数组小了会越界,如果大了就浪费。所以我想采用这种指针的方式。


指针是指向本机的内存地址,你要网络发送数据过去,难道你要接收数据的电脑用指针只向你的电脑的内存地址????

论坛徽章:
0
9 [报告]
发表于 2009-06-24 11:34 |只看该作者

回复 #8 mgqw 的帖子

我发的数据是_mydata.Header = "GET / HTTP/1.1\r\n"这样来填充的。应该类似const char [] = "GET / HTTP/1.1\r\n"是吧。

论坛徽章:
0
10 [报告]
发表于 2009-06-24 12:09 |只看该作者
其实你根本就不需要自己定这样的结构体的,因为HTTP本身就是个很好的结构(协议)。。。有什么传什么,有多大就传多大,然后在接收端做解析。。。

[ 本帖最后由 alexhappy 于 2009-6-24 12:10 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP