想用socket发get请求,下载一个页面。
setsockopt(s, IPPROTO_IP, IP_HDRINCL, (char *)&bOpt,sizeof(bOpt));
之后
send(s,szSendBuf,sizeof(ipHdr)+sizeof(tcpHdr)+strlen(strMessage),0);
可是服务器返回参数错误信息。
郁闷啊....高人达人牛人快help个busy吧

解决方案 »

  1.   

    你可以不用TCP,用IP协议.自已经构建IP包.
      

  2.   

    要改变IP头,只能用raw socket.
      

  3.   

    你需要建立raw socket才能设置IP头,否则是无效的.
    如果用raw socket来封装TCP是不可能的,所以你要用socket spi来实现.
      

  4.   

    那socket spi是什么东东?具体如何实现在请求http页面时,添加自定义的IP头啊?
      

  5.   

    你需要建立raw socket才能设置IP头,否则是无效的.
    如果用raw socket来封装TCP是不可能的,所以你要用socket spi来实现.////////////////////////////////////////////////////////////////////////
    这话怎么说?
      

  6.   

    raw socket是直接处理IP层,而不是让操作系统来处理,这样的话TCP也要你来处理。
    应用程序来处理TCP协议栈,想都不要想,除非你做成驱动。
      

  7.   

    那socket spi是什么东东?
    Winsock服务提供者接口(SPI),它是Winsock 2中里面增加的一种不同于TCP/IP协议的传输协议。
    具体的话,楼主自己找点资料参考一下了~~
      

  8.   

    raw socket是直接处理IP层,而不是让操作系统来处理,这样的话TCP也要你来处理。
    应用程序来处理TCP协议栈,想都不要想,除非你做成驱动。//////////////////////////////////////////////////////////////////////////
    是的啊,raw socket处理的是IP数据包,也包括对IP数据包所有传送的数据内容进行填写,当然可以进行TCP头的处理了.当然,这个处理是和系统的协议栈是没关系的.用raw socket的时候,系统是不会为我们添加IP包头首部之后的数据内容的.得我们自己实现.