WSASocke创建失败。。。。

房乔 发布于 2016/04/18 13:24
阅读 155
收藏 0
 WSADATA WSAData;
    SOCKET sock;
    
    IP_HEADER ip_hdr;
    TCP_HEADER tcp_hdr;
   // PSD_HEADER tcp_hdr;

    char Sendto_Buff[40000];  //发送缓冲区 //发送缓冲区最大值
    unsigned short check_Buff[40000]; //检验和缓冲区
    const char tcp_send_data[]={"This is my homework of networt,I am happy!"};

    BOOL flag;
    WORD version;
    int rect,nTimeOver;

    if (argc!= 5)
    {
        printf("Useage: SendTcp soruce_ip source_port dest_ip dest_port \n");
        return false;
    }
    version =MAKEWORD(2,2);
    if (WSAStartup(version, &WSAData)!=0)
    {
        printf("WSAStartup Error!\n");
        return false;
    }


  //确认WinSock DLL支持版本2.2  
    if(LOBYTE(WSAData.wVersion)==2 || HIBYTE(WSAData.wVersion)==2)  
    {  
       // WSACleanup();   //释放为该程序分配的资源,终止对winsock动态库的使用  
        printf("well!\n");  
        //return 0;  
    }  
 

    /*
       这里,我们设置了SOCK_RAW标志,表示我们声明的是一个原始套接字类型。创建原始套接字后,
       IP头就会包含在接收的数据中,如果我们设定 IP_HDRINCL 选项,那么,就需要自己来构造IP头
       。注意,如果设置IP_HDRINCL 选项,那么必须具有 administrator权限,要不就必须修改注册表:
       HKEY_LOCAL_MacHINE/System/CurrentControlSet/Services/Afd/Parameter/
       修改键:DisableRawSecurity(类型为DWord),把值修改为 1。如果没有,就添加。
  */
    //sock=WSASocket(AF_INET,SOCK_RAW,IPPROTO_RAW,NULL,0,WSA_FLAG_OVERLAPPED);
     sock=WSASocket(AF_INET,SOCK_RAW,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPED);
    //sock=socket(AF_INET,SOCK_RAW,IPPROTO_RAW);
    flag=true;
    if(sock==INVALID_SOCKET){
      printf("socket init failuer!");
          return 1;

    }

各位大神请问这里面socket为什么创建失败,输出socket init failuer! 这应该怎么解决?



加载中
返回顶部
顶部