C语言如何实现POST数据包

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言如何实现POST数据包相关的知识,希望对你有一定的参考价值。

先建立TCP连接,然后发送HTTP post.
你看看下面的数据包就知道了。

追问

请问一下,C语言UTF8要怎样转gb2312

追答

http://zhidao.baidu.com/question/103273521.html
我没检验过,你自己检验一下。

参考技术A 1、第一法则:站在巨人肩膀上 && 不要重复造轮子。
对于这种复杂的过程,第一选择是使用现成的,节约时间,提升效率。Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。网络封包分析软件的功能可想像成 "电工技师使用电表来量测电流、电压、电阻" 的工作 - 只是将场景移植到网络上,并将电线替换成网络线。在过去,网络封包分析软件是非常昂贵,或是专门属于营利用的软件。Ethereal的出现改变了这一切。在GNUGPL通用许可证的保障范围底下,使用者可以以免费的代价取得软件与其源代码,并拥有针对其源代码修改及客制化的权利。Ethereal是目前全世界最广泛的网络封包分析软件之一。
2、第二法则:学习 && 提升。
如果是单纯的学习知识,可以直接尝试写一些具有部分功能的程序,过程会有点艰难,但非常有意义。学习网络编程,需要了解 开放系统互连参考模型的的七层每一层的意义以及现实当中实现的四层的网络协议。然后就可以知道抓包的包位于模型当中的传输层协议,包括UDP和TCP的协议。进一步要学习每种协议的格式,表头,数据包等等。一句话,冰冻三尺非一日之寒。
参考技术B 编>追问

????

C语言中如何将2个结构体拼成一个包

在做聊天程序的时候用send(socket,buff,sizeof(buff),0)发送数据时,我需要发送2个结构体,也就是把两个结构体拼成buff,请问各位高手,我该怎么拼。比如这里有2个结构体:
struct msg_pack

char cmd;
char status;
short int len;
head;

struct message

char a[1024];
b;

我要把这个2个结构体拼在字符串buff中,如何实现啊?

memcpy原型:extern void *memcpy(void *dest, void *src, unsigned int count); 用法:#include <string.h> 功能:由src所指内存区域复制count个字节到dest所指内存区域。 说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针。 可以拿它拷贝任何数据类型的对象。 例:char a[10],b[5]; memcpy(b, a, sizeof(b)); /*注意如果用sizeof(a),会造成b的内存地址溢出 参考技术A 你这个char buff应该是1024 + 1 + 1 + 2 个空间大小。
你这两个结构体中需要特殊处理的是short int len,因为它占两个字节(大部分是这样,不知道你的机器占多少个字节)把那个short int len进行位操作,变成两个字符(的ASC码)。
你也可以把short int len直接用itoa()变成一个字符串,但这样的话这个字符串的长度是不确定的。
然后你再用strcpy,把结构体中字符copy过去,或者直接把字符给你所定义的buf.
// 动态申请内存
...
*buf = msg_pack1.cmd;
*(buf + 1)= msg_pack1.status;
*(buf + 2)= (你通过len转换过来的第一个字符)
*(buf + 3)= (你通过len转换过来的第二个字符)

// 复制message 中的1024个字符
strcpy(buf + 4, message1.a)

这样的话就行了,转换len的时候也可以用itoa,获得的字符串,进行转换。不同的是你申请buf的大小不一样。
参考技术B memcpy就可以了

struct message msg;
struct msg_pack head;

char buffer[max_size];//max_size needs to be constant

memcpy(buffer, &head, sizeof(struct msg_pack) );
memcpy(buffer+sizeof(struct msg_pack), &msg, sizeof(struct message) );本回答被提问者采纳
参考技术C #pragma pack(push,1)
head h;
b lb;
//h初始化
//lb初始化
send(&h,sizeof(h)+sizeof(lb),...)
#pragma pack(pop)

以上是关于C语言如何实现POST数据包的主要内容,如果未能解决你的问题,请参考以下文章

在LINUX下如何利用C语言实现HTTP的get和post方法?

c语言如何调用网页上某个功能

C语言中如何将2个结构体拼成一个包

C语言,如何实现搜索内存数据

C语言中如何实现输入输出多组数据,该如何结束输入

C语言中如何实现多组数据输入输出?