我想自定义IP包头,程序如下:         
         WSADATA WSAData;
WSAStartup(MAKEWORD(2,2),&WSAData); sock = socket(AF_INET,SOCK_RAW,IPPROTO_RAW);
setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char*)&flag,sizeof(flag));编译时总说IP_HDRINCL没定义,我已经包含了头文件啊,如下:
#include <WINSOCK2.H> 
#include <WS2TCPIP.H>
#include <stdio.h>
#pragma comment(lib,"Ws2_32.lib")我在头文件WS2TCPIP.H查看,明明定义了IP_HDRINCL,为什么编译时总说我没定义,
我是XP的操作系统,我是管理员最高权限,为什么会这样,我想了三天了,实在找不到哪有问题,大家帮帮忙,我一定重分酬谢!!!!!!

解决方案 »

  1.   

    不会吧?你包含的ws2tcpip.h在哪?
      

  2.   

    WSADATA WSAData;
    WSAStartup(MAKEWORD(2,2),&WSAData); sock = socket(AF_INET,SOCK_RAW,IPPROTO_RAW);
    setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char*)&flag,sizeof(flag));

    #include <WINSOCK2.H> 
    #include <WS2TCPIP.H>
    #include <stdio.h>
    #pragma comment(lib,"Ws2_32.lib")
    在一个文件中么?如果在多个文件中,那么,上面代码所在的文件是否包含了下面这些#include所在的头文件?
      

  3.   

    你的用法没问题阿,查查#include吧!
      

  4.   

    对不起,周末没上CSDN,现在才看见各位的帮忙,先谢谢各位的帮助,感激!!!!!!
    根据各位说的,我可能是头文件没包含好,我又仔细检查了下,但我看我的头文件都包含好了啊,各位帮我看下
    我新建Dlg,新建时选择支持CSocket,其他默认,文件名:MySocketDlg
    在MySocketDlg.cpp中// MySocketDlg.cpp : implementation file
    //
    #include <WINSOCK2.H> 
    #include <WS2TCPIP.H>
    #include <stdio.h>
    #pragma comment(lib,"Ws2_32.lib")#include "stdafx.h"
    #include "MySocket.h"
    #include "MySocketDlg.h"#ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif在OnInitDialog()中         WSADATA WSAData;
    WSAStartup(MAKEWORD(2,2),&WSAData); sock = socket(AF_INET,SOCK_RAW,IPPROTO_RAW);
    setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char*)&flag,sizeof(flag));为什么总说IP_HDRINCL没定义?如果程序没问题那会是什么问题呢,操作系统?或者什么其它的,我的机子装了C++ Builder,会是这个问题吗,是不是我的头文件没包含好啊,还又其他的包含方法吗
    大家帮我看下,我都要抓狂了,到底哪又问题??
      

  5.   

    我在别的机子上也试了下,还是说IP_HDRINCL没定义,那就应该不是我的机器的问题,但问题出在哪呢,我的#include <WINSOCK2.H> 
    #include <WS2TCPIP.H>
    #include <stdio.h>
    #pragma comment(lib,"Ws2_32.lib")和WSADATA WSAData;
    WSAStartup(MAKEWORD(2,2),&WSAData);sock = socket(AF_INET,SOCK_RAW,IPPROTO_RAW);
    setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char*)&flag,sizeof(flag));
    在同一个文件里面,都在在MySocketDlg.cpp中,,为什么还说我IP_HDRINCL没定义呢?
    我实在找不出问题,大家帮忙看下,我再加50分,要是不够,我再开的帖子加分。
    大家帮帮忙,我都要急死了!!!!!!!!
      

  6.   

    查看一下 VC include 目录,按顺序查找WS2TCPIP.H
    如果你是 VC6.0的话,需要安装platform sdk 并且要将其头文件目录放到VC自带目录的前面。
      

  7.   

    to:  keios(C->C++->java->C 循环中)
    谢谢你的帮助,小弟先谢了!!!!
    我用的是VC6.0,我在VC include 目录下查看了下,确实有WS2TCPIP.H文件,路径如下
    C:\Program Files\Microsoft Visual Studio\VC98\Include
    我打开看过了,里面确实定义了IP_HDRINCL,如下#define SIO_GET_INTERFACE_LIST  _IOR('t', 127, u_long) /* Option to use with [gs]etsockopt at the IPPROTO_IP level */#define IP_OPTIONS 1 /* set/get IP options */
    #define IP_HDRINCL 2 /* header is included with data */
    #define IP_TOS 3 /* IP type of service and preced*/
    #define IP_TTL 4 /* IP time to live */
    #define IP_MULTICAST_IF 9 /* set/get IP multicast i/f  */
    #define IP_MULTICAST_TTL       10 /* set/get IP multicast ttl */
    #define IP_MULTICAST_LOOP      11 /*set/get IP multicast loopback */
    #define IP_ADD_MEMBERSHIP      12 /* add an IP group membership */
    #define IP_DROP_MEMBERSHIP     13/* drop an IP group membership */
    #define IP_DONTFRAGMENT     14 /* don't fragment IP datagrams */是不是像你说的,要安装platform sdk,这个东东哪里有下的啊,给我个地址好不好啊,非常感谢!!
    小弟还有一个问题,我的VC include 目录明明有WS2TCPIP.H文件,我在程序中也包含了WS2TCPIP.H,为什么编译时会说我没定义?按理说WS2TCPIP.H中定义了IP_HDRINCL,而我又包含了WS2TCPIP.H,就应该OK了,为什么会出现编译说我没定义的情况呢?我真的觉得很奇怪?怎么都想不通?非常感谢楼上的!!!!!