函数原型1 : in_addr_t inet_addr(const char *cp);
函数原型1 :in_addr_t inet_addr(const char *cp);
参数 cp:传入的ip地址
demo:
-
int ip_addr;
-
ip_addr = inet_addr("192.168.2.125"); //设置ip点分十进制地址的地址
-
if(ip_addr==INADDR_NONE) // 返回值错误判断
-
printf("ERROR");
-
printf("%d\n", ip_addr); //打印转换后的网络字节序
函数原型2:int inet_aton(const char *cp, struct in_addr *inp);
参数 cp:传入的ip地址;inp 指向转换后存储到struct in_addr结构体的s_addr;
-
int ip_addr;
-
struct in_addr inet_ip_addr;
-
ip_addr = inet_aton("192.168.2.125", &inet_ip_addr);
-
printf("%d\n",inet_ip_addr.s_addr);
函数原型3: char *inet_ntoa(struct in_addr in);
-
struct in_addr network;
-
network.s_addr=2097326272; //为s_addr赋值--网络字节序
-
printf("IP : %s\n", inet_ntoa(network));
函数原型4: int inet_pton(int af, const char *src, void *dst);
af:地址簇,可选项:AF_INET(IPv4);AF_INET6(IPv6); src:传入的IP地址
dst:将ip地址转换成网络字节序后的结果存储在dst指向的 struct in_addr 结构体中 s_addr 成员
-
int ret;
-
struct in_addr var_ip;
-
ret = inet_pton(AF_INET, "192.168.2.125", (void *)&var_ip);
-
if(ret==0)
-
printf("IP is not contained in address family\n");
-
if(ret == -1)
-
printf("errno: EAFNOSUPPORT\n");
-
printf("%d\n",var_ip.s_addr);
-
/*----------------
-
struct in_addr {
-
uint32_t s_addr; // ip地址的网络字节序
-
};
-
上述结构体为struct sockaddr_in 中的参数3
-
struct sockaddr_in {
-
sa_family_t sin_family; // 地址簇
-
in_port_t sin_port; // 端口的网络字节序
-
struct in_addr sin_addr; // internet address
-
};
-
-----------------*/
函数原型5 --> const char *inet_ntop(int af, const void *src,char *dst, socklen_t size);
af 同上; src:传入的网络字节序; dst:传出的IP地址; size:IP地址长度
-
char ip_buff[INET_ADDRSTRLEN]={0};
-
struct in_addr net_ip;
-
net_ip.s_addr = 2097326272;
-
const char *ret;
-
ret = inet_ntop(AF_INET, (const void *)&net_ip.s_addr, ip_buff, sizeof(ip_buff) );
-
if(ret==NULL){ // 对返回值进行错误判断
-
if(strcmp(ret,"EAFNOSUPPORT"))
-
perror("AF error:");
-
if(strcmp(ret,"ENOSPC"))
-
printf("address string over setted size");
-
} // 会报警告
-
printf("%s\n", ip_buff);
所用到的头文件如下:
-
#include <stdio.h>
-
#include <string.h>
-
#include <errno.h>
-
#include <sys/socket.h>
-
#include <netinet/in.h>
-
#include <arpa/inet.h>
学习完写的小demo,不是很好,代码中写死IP和网络字节序是为了方便,写得不算好,毕竟才看完网络编程的视频,欢迎各位大佬指点,也欢迎各位像我一样的小白可以直接拿去用方便理解!
(478条消息) IP地址转换函数inet_addr(),inet_aton(),inet_ntoa(),int_pton()_Lurora0的博客-CSDN博客_inet_addr