1,in_addr_t inet_addr(const char *cp) 将IP地址转换成一个32位的整数
我们举个例子
int main()
{
unsigned int addr=inet_addr("192.168.1.100");
printf("addr is %u\n",ntohl(addr));
unsigned int ip = ntohl(addr);
unsigned char *ipchar=(unsigned char *)&ip;
printf("ip 4 bytes is %x,%x,%x,%x\n",ipchar[0],ipchar[1],ipchar[2],ipchar[3]);
return 0;
}
中断的打印信息是:
addr is 3232235876
ip 4 bytes is 64,1,a8,c0
通过inet_addr()函数,ntohl函数,我们得到了32位表示地址的数据,3232235876。
64,1,a8,c0 四个字节转成10进制分别是100,1,168,192
为什么会反过来,是因为我们的X86平台的字节序是小端模式。
2.这样倒这看很奇怪, 于是就有了char *inet_ntoa(struct in_addr in) 可以将 网络字节序IP地址 转成 点分十进制的IP地址
举个例子
int main()
{
unsigned int addr2=inet_addr("192.168.1.101");
struct in_addr ipaddr;
ipaddr.s_addr = addr2;
printf("%s\n",inet_ntoa(ipaddr));
return 0;
}
中断的打印信息是:192.168.1.101
3.还有一个相反的函数就是将 点分十进制IP地址,转换成 网络字节序IP地址
int inet_aton(const char *cp,struct in_addr *inp)
4. 套接字
流式套接字 SOCK_STREAM -> TCP
数据报式套接字 SOCK_DGRAM -> UDP
原始套接字SOCK_RAW