Windows编程 网络编程常见结构体

网络地址结构

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与sockaddr_in两个数据结构保持大小相同而保留的空字节。

} SOCKADDR_IN, *PSOCKADDR_IN;
typedef struct in_addr { 
        union { 
                struct { UCHAR s_b1,s_b2,s_b3,s_b4; } S_un_b; 
                struct { USHORT s_w1,s_w2; } S_un_w; 
                ULONG S_addr;  //IP地址 
        } S_un; 
#define s_addr  S_un.S_addr /* can be used for most tcp & ip code */ 
#define s_host  S_un.S_un_b.s_b2    // host on imp 
#define s_net   S_un.S_un_b.s_b1    // network 
#define s_imp   S_un.S_un_w.s_w2    // imp 
#define s_impno S_un.S_un_b.s_b4    // imp # 
#define s_lh    S_un.S_un_b.s_b3    // logical host 
} IN_ADDR, *PIN_ADDR, FAR *LPIN_ADDR;

 填值的时候使用sockaddr_in结构,而作为函数(如socket, listen, bind等)的参数传入的时候转换成sockaddr结构就行了,毕竟都是16个字符长。

 inet_addr()是将一个点分制的IP地址字符串(如192.168.0.1)转换为上述结构中需要的32位IP地址

inet_addr( )和inet_ntoa ( )

unsigned long PASCAL FAR inet_addr (const char FAR * cp);

char FAR * PASCAL FAR inet_ntoa (struct in_addr in);

inet_addr函数需要一个字符串作为其参数,该字符串指定了以点分十进制格式表示的IP地址(例如:192.168.0.16)。而且inet_addr函数会返回一个适合分配给S_addr的u_long类型的数值。

Inet_ntoa函数会完成相反的转换,它接受一个in_addr结构体类型的参数并返回一个以点分十进制格式表示的IP地址字符串

关于字节序可以参考我另一篇博文:http://www.cnblogs.com/Aion/p/3423832.html

 

 

struct  hostent {
        char    FAR * h_name;           /* official name of host 主机名指针*/
        char    FAR * FAR * h_aliases;  /* alias list 别名指针*/
        short   h_addrtype;             /* host address type 地址类型*/
        short   h_length;               /* length of address 地址长度*/
        char    FAR * FAR * h_addr_list; /* list of addresses 地址列表*/
#define h_addr  h_addr_list[0]          /* address, for backward compat 列表中第一个地址*/
};
hostent是host entry的缩写,该结构记录主机的信息,包括主机名、别名、地址类型、地址长度和地址列表。之所以主机的地址是一个列表的形式,原因是当一个主机有多个网络接口时,自然有多个地址。
原文地址:https://www.cnblogs.com/Aion/p/3410535.html