我想自定义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的操作系统,我是管理员最高权限,为什么会这样,我想了三天了,实在找不到哪有问题,大家帮帮忙,我一定重分酬谢!!!!!!
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的操作系统,我是管理员最高权限,为什么会这样,我想了三天了,实在找不到哪有问题,大家帮帮忙,我一定重分酬谢!!!!!!
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所在的头文件?
根据各位说的,我可能是头文件没包含好,我又仔细检查了下,但我看我的头文件都包含好了啊,各位帮我看下
我新建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,会是这个问题吗,是不是我的头文件没包含好啊,还又其他的包含方法吗
大家帮我看下,我都要抓狂了,到底哪又问题??
#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分,要是不够,我再开的帖子加分。
大家帮帮忙,我都要急死了!!!!!!!!
如果你是 VC6.0的话,需要安装platform sdk 并且要将其头文件目录放到VC自带目录的前面。
谢谢你的帮助,小弟先谢了!!!!
我用的是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了,为什么会出现编译说我没定义的情况呢?我真的觉得很奇怪?怎么都想不通?非常感谢楼上的!!!!!