sockaddr_in结构: struct sockaddr_in{ short sin_family; unsigned short sin_port; struct in_addr sin_addr; char sin_zero[8]; }; |
参数解释:
sin_family Address
family (must be AF_INET)sin_port IP
port.(必须要采用网络数据格式,普通数字可以用htons()函数转换成网络数据格式的数字)sin_addr IP
address.(注意:是in_addr结构的成员变量)sin_zero Padding to make structure
the same size as
SOCKADDR.(没有实际意义,只是为了
跟SOCKADDR结构在内存中对齐).
注意:This is the form of the
SOCKADDR structure specific to the Internet address family and
can be cast to SOCKADDR.
注意:sockaddr和sockaddr_in之间的强制类型转换职能通过指针来转换.(原因:两个内存大小相同而结构体重的数据类型不同)
sockaddr向sockaddr_in转换时:
sockaddr
sa
(sockaddr_in*)&sa;
sockaddr_in向sockaddr转换时:
sokcaddr_in
sai;
(sockaddr*)&sai
++++++++++++++++++++++++++++++++++++++++++++++++++
in_addr结构:The
in_addr structure represents
an IPv4 Internet
address.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;
参数解释:
S_un_b
An IPv4 address formatted as four
u_chars.
S_un_w An IPv4
address formatted as two
u_shorts.
S_addr An IPv4
address formatted as a
u_long.(注意:如果是字符串类型的ip地址可以通过inet_addr()
函数转变成u_long类型的ip地址,如果想从S_addr中得到字符串类型的ip地址可以通过inet_ntoa()
函数)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
addrinfo 结构 注意在ws2tcpip.h文件中定义
The addrinfo structure is used by the getaddrinfo
function to hold host address information.
typedef struct addrinfo {
int ai_flags;
int ai_family;
int ai_socktype;
int ai_protocol;
size_t ai_addrlen;
char* ai_canonname;
struct sockaddr* ai_addr;
struct addrinfo* ai_next;
} ADDRINFOA,
*PADDRINFOA;