socket编程学习(二)地址转换与套接字

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值