IP地址格式

本文介绍了IP地址的两种格式:ASCII的点分十进制和整数表示,并详细解析了网络结构体如struct in_addr、sockaddr和sockaddr_in的组成及用途。还列举了用于IP地址和字符串间转换的函数,如inet_network、inet_addr、inet_aton和inet_ntoa,以及字节序转换函数htonl和htons。
摘要由CSDN通过智能技术生成

一、IP地址有两种格式

1、ASCII表示,为点分十进制字符串格式,IPv4 numbers-and-dots notation

        如196.168.1.1

2、整数表示,binary data

        如 196.168.1.1转换为整数形式,是3232235777

        196.168.1.1 -> C0.A8.01.01 -> C0A80101 -> 3232235777

二、表示结构体

1、struct in_addr { in_addr_t s_addr; };

表示一个32位十六进制表示的IPv4地址。in_addr_t 一般为32位的unsigned int,其字节顺序为网络字节序,即该无符号数采用大端字节序。其中每8位表示一个IP地址中的一个数值。

2、struct sockaddr {
        u_short sa_family;         /* address family,常为AF_INET,代表Internet(TCP/IP)地址族 */
        char    sa_data[14];       /* up to 14 bytes of direct address,包含IP地址和端口号 */
     };

sockaddr是通用的socket地址结构体。


3、struct sockaddr_in {
        short   sin_family;
        u_short sin_port;
        struct  in_addr sin_addr;
        char    sin_zero[8];         /* 目的是填充至与struct sockaddr 相同长度 */
     };

sockaddr_in是Internet 和socket通用的地址结构体。

三、格式转换函数

1、in_addr_t inet_network(const char *cp);

        可将字符串形式转换为整数形式,返回的整数形式是主机字节序;

2、in_addr_t inet_addr(const char *cp);

        可将字符串形式转换为无符号长整型用的,返回的整数形式是网络字节序;

        struct sockaddr_in inaddr;

        inaddr.sin_addr.s_addr = inet_addr("132.241.5.10");

3、int inet_aton(const char *cp, struct in_addr *inp);

        上述两个函数识别255.255.255.255地址为无效地址(历史原因),而inet_aton识别255.255.255.255是有效的,返回的是网络字节序的IP地址。

4、char *inet_ntoa(struct in_addr in);

        长整型转换成字符串格式;

        返回IP字符串,如 "132.241.5.10"

5、int inet_pton(int af, const char *src, void *dst);

        将IP地址从字符串格式转换成网络地址格式,支持IPV4和IPV6

        af:协议族

        src:指向IP地址字符串

        dst:指向网络地址的结构体

6、htonl()

        将32位的主机字节顺序转化为32位的网络字节顺序。

7、htons()

        将16位的主机字节顺序转化为16位的网络字节顺序。

(ip地址是32位的,端口号是16位的 )

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值