如何填充数据包的头?
我要编程自己填充自己的数据包头,我现在己写了自己的结构体,现要将ip,udp 和message拷到同一个buffer,做完总是发现sizeof(buffer)=4,哪位大侠能告小弟如何填充?
  typedef  struct  ip_hdr
////ip头
{
unsigned char  ip_verlen;                //IP版本和长度
unsigned char  ip_tos;//          //IP服务类型
unsigned short ip_totallength;//    //总的长度
unsigned short ip_id ;//             //独一无二的标识符
unsigned short ip_offset;//           //fragment offset field
unsigned char  ip_ttl;//               //存活时间
unsigned char ip_protocol;//       //协议
unsigned short checksum;//       //效检和
unsigned int ip_srcaddr;//       //源地址
unsigned int ip_destaddr;//      //目的地址
}IP_HDR,*PIP_HDR;        //FAR* LPIP_HDR;
typedef struct udp_hdr                //UDP头
{
unsigned short src_portno;//    //源端口号
unsigned short dst_portno;//    //目的端口号
unsigned short udp_length;//    //UDP包长度
unsigned short udp_checksum;//  //UDP效检和
}UDP_HDR,*PUDP_HDR;

解决方案 »

  1.   

    buffer的容量有没有设为大些,
    如:char buffer[1024];
      

  2.   

    看数据的长度怎么能用sizeof呢?
    如果你这样写:char *buffer = new char[……];
    那么不管你在buffer里存放什么数据,sizeof(buffer)都是4。
    sizeof是看一个变量占用的多少的内存空间!
    填充包头有很多种办法,一种就是你使用的拷贝的办法:
    IP_HDR ip_header;
    UDP_HDR udp_header;
    ……对各个成员设置
    然后,开空间:
    char *buffer = new char[sizeof(IP_HDR) + sizeof(UDP_HDR)];
    memcpy(buffer, &ip_header, sizeof(IP_HDR));
    memcpy(buffer + sizeof(IP_HDR), &udp_header, sizeof(UDP_HDR));
    ……
    delete buffer;更好的办法是:
    char *buffer = new char[sizeof(IP_HDR) + sizeof(UDP_HDR)];
    IP_HDR *p1 = (IP_HDR *)buffer;
    UDP_HDR *p2 = (UDP_HDR *)(buffer + sizeof(IP_HDR));
    然后就可以直接对p1, p2直接操作了。