//填充IP首部 
ipHeader.h_verlen=(4<<4 | sizeof(ipHeader)/sizeof(unsigned long)); 
// ipHeader.tos=0; 
ipHeader.total_len=htons(sizeof(ipHeader)+sizeof(tcpHeader)); 
ipHeader.ident=1; 
ipHeader.frag_and_flags=0;

解决方案 »

  1.   

    sizeof(ipHeader)/sizeof(unsigned long)); 
    这句是做什么?
      

  2.   

    IP报头的最前面8bit是分别表示IP版本号和IP报头长度
    ipHeader.h_verlen=(4<<4 | sizeof(ipHeader)/sizeof(unsigned long)); 
    这句就是填充这两个字段
      

  3.   

    4<<4
    把版本号4左移4位。
    sizeof(ipHeader)/sizeof(unsigned long));
    首部长度是以4字节(32位)衡量,上一句=5,
    然后和版本号组合就得到总一个字节的版本号和长度:
    ip.ver=4
    ip.hlen=5