• 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 



  • 相关阅读:
    Windows Server 2003中不能安装MSN的解决方法
    招新人的一个标准
    SVN源代码服务器 证书通不过时的解决办法
    项目风险控制
    项目与团队管理体会
    季羡林老先生百年为人处世哲学
    李一男2003年在港湾给开发人员培训时的语录
    项目管理中的一些想法
    poj 1236 Network of Schools
    poj 2528 Mayor's posters
  • 原文地址:https://www.cnblogs.com/Jasonscor/p/3315130.html
Copyright © 2020-2023  润新知