c socket inet_pton inet_ntop

1
  #include <arpa/inet.h>

/*

表达式格式(presentation):形如192.168.0.1,ipv6 X:X:X:X:X:X:X:X
数值格式(numeric):存储地址的二进制形式。
*/


/*
原型:int inet_pton( int family, const char *strptr, void *addrptr );
功能:将字符串strptr(即表达格式的地址)转换为网络地址。
参数:family既可以是AF_INET,也可以是AF_INET6;
      strptr指向ASCII地址的首地址(***.***.***.***格式),addrptr是套接字地址结构;
返回值: 如果成功返回1;
        如果函数出错将返回一个负值,并将errno设置为EAFNOSUPPORT;
        如果参数af指定的地址族和src格式不对,函数将返回0。
*/

/*
原型:const char *inet_ntop(int family, const void *addrptr, char *strptr, socklen_t len );
功能:将数值格式转换为表达式格式。
参数:family既可以是AF_INET,也可以是AF_INET6;
      strptr指向ASCII地址的首地址(***.***.***.***格式),addrptr是套接字地址结构;
      len目标存储单元大小,避免溢出调用者的缓冲区。
返回值: net_ntop函数成功的话返回字符串的首地址,错误返回NULL;
*/


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main (void)
{
    char IPdotdec[20]; //存放点分十进制IP地址
    struct in_addr s; // IPv4地址结构体
    // 输入IP地址
    printf("Please input IP address: ");
    scanf("%s", IPdotdec);
    // 转换
    inet_pton(AF_INET, IPdotdec, (void *)&s);
    printf("inet_pton: 0x%x\n", s.s_addr); // 注意得到的字节序
    // 反转换
    inet_ntop(AF_INET, (void *)&s, IPdotdec, 16);
    printf("inet_ntop: %s\n", IPdotdec);
}

/*
控制台:

Please input IP address: 192.168.0.1
inet_pton: 0x100a8c0
inet_ntop: 192.168.0.1
*/

你可能感兴趣的:(socket)