struct sockaddr {
unsigned short sa_family;
char sa_data[14];
};
上面是通用的socket地址,一般在用socket函数时使用。正常情况下,用以下两种方式转换
struct sockaddr_in {
short int sin_family;
unsigned short int sin_port; //端口
struct in_addr sin_addr; //IPV4
unsigned char sin_zero[8]; //一般清0
};
struct in_addr就是32位IP地址。
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;
};
htonl(long port) :把长整型的port转换为网络字节顺序;
htons(short port) :把短整型的port转换为网络字节顺序。
ulong inet_addr(const char *p) :把字符串表示的IP地址转换为网络字节顺序的IP地址
char *inet_ntoa(ulong ip) :把网络字节顺序的IP地址转换为字符串表示的IP地址。
主机字节顺序:一般为低位在前,高位在后,比较符合人的逻辑思维;
网络字节顺序:一般为高位在前,低位在后,符合人输写数字的习惯。