zoukankan      html  css  js  c++  java
  • inet_addr解析

    在WinSock编程中,经常会用到inet_addr这个函数,下面就来详细解剖一下这个函数

    在MSDN中对于该函数的描述是:

    The inet_addr function converts a string containing an IPv4 dotted-decimal address into a proper address for the IN_ADDR structure.

    翻译过来就是将一个字符串(IPv4格式的字符串),如:“192.168.0.1”转换诚IN_ADDR结构,那么IN_ADDR结构又是一种什么样的结构呢,。

    继续MSDN。。。

    typedef struct in_addr 
    {  
    	union 
    	{    
    		struct 
    		{      
    			u_char s_b1,s_b2,s_b3,s_b4;    
    		}S_un_b;    
    		struct 
    		{      
    			u_short s_w1,s_w2;    
    		}S_un_w;    
    		u_long S_addr;  
    	}S_un;
    } IN_ADDR,  *PIN_ADDR,  FAR *LPIN_ADDR;
    

    整理一下,将格式整理的更清晰一些:

    typedef struct in_addr
    {
    	union
    	{
    		struct
    		{
    			u_char s_b1;
    			u_char s_b2;
    			u_char s_b3;
    			u_char s_b4;
    		}S_un_b;
    		struct
    		{
    			u_short s_w1;
    			u_short s_w2;
    		}S_un_w;
    		u_long S_addr;
    	}
    }IN_ADDR, *PIN_ADDR, FAR *LPIN_ADDR;
    

    可以看到,该结构体是一个还算比较复杂的结构体,结构体里面嵌套了联合体(union),联合体(union)内部又嵌套了结构体,

    于是,可以清晰地看到inet_addr函数主要是将一个包含IPv4格式的字符串(如:“192.168.0.1”)转换成一个IN_ADDR结构对象。

    PS:扯远一点,在看下结构体SOCKADDR_IN:

    在MSDN内的说明是:

    struct sockaddr_in{
       short sin_family;
       unsigned short sin_port;
       struct in_addr sin_addr;
       char sin_zero[8];
    };
     
    

    在ws2def.h头文件中的定义是:

    typedef struct sockaddr_in {
    
    #if(_WIN32_WINNT < 0x0600)
        short   sin_family;    
    #else //(_WIN32_WINNT < 0x0600)
        ADDRESS_FAMILY sin_family;
    #endif //(_WIN32_WINNT < 0x0600)
    
        USHORT sin_port;
        IN_ADDR sin_addr;
        CHAR sin_zero[8];
    } SOCKADDR_IN, *PSOCKADDR_IN;
    

    这里,ADDRESS_FAMILY其本质就是USHORT

    在ws2def.h头文件中有定义:

    typedef USHORT  ADDRESS_FAMILY 



  • 相关阅读:
    uni-app中showModel会阻碍 uni.navigateBack跳转
    vue中使用Bus
    vue中class动态绑定值拼接字符串
    使用moment格式化
    sublimit中智能提示插件的安装
    element-table
    全球十大顶级俱乐部
    java的几种对象(PO,VO,DAO,BO,POJO)解释
    软件工程术语(上)
    职场秘笈:聪明人离职后必做的5件事
  • 原文地址:https://www.cnblogs.com/Jasonscor/p/3315130.html
Copyright © 2011-2022 走看看