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的缩写,该结构记录主机的信息,包括主机名、别名、地址类型、地址长度和地址列表。之所以主机的地址是一个列表的形式,原因是当一个主机有多个网络接口时,自然有多个地址。

你可能感兴趣的:(windows)