UNIX网络编程(套接字编程)
inet_ntop和inet_pton函数的示例:
/*
* 日期:2021.8.8
* 这个代码是用来熟悉inet_pton和inet_ntop这两个函数的
*
* #include <arpa/inet.h>
*
* 1.int inet_pton(int family,const char *strptr,void *addrptr);
* 这个函数将strptr指针所指的字符串,转换为二进制的网络地址格式
* 并将其放在addrptr,如果成功返回1,如果输入的不是有效的表达式,返回值为0
* 出错,返回-1
*
* 2.int inet_ntop(int family,const void *addrptr,char *strptr,size_t len)
* 这个函数将addrptr从数值格式转换为表达式格式strptr
* len参数是目标存储单元的大小,以免该函数溢出其调用者的缓冲区
* 如果调用成功,返回strptr这个指针的地址
*
*/
#include "unp.h"
int main(int argc,char **argv)
{
int addrptr;
//将字符串转换为32位的IPv4地址(网络地址)
if(inet_pton(AF_INET,"1.2.4.8",&addrptr)!=1){
printf("something error\n");
}else{
printf("转换后的二进制地址为:%d\n",addrptr);
}
//这样操作会导致内存访问溢出,为什么??
//char *strptr=malloc(8);
//将二进制的网络地址转换为字符串
char strptr[64];
if(inet_ntop(AF_INET,&addrptr,strptr,64)==NULL){
printf("something error\n");
}else{
//当strptr变成*strptr时,会造成Address错误,
//因为对于数组来说,变量名就相当于地址!!!
printf("%s\n",strptr);
}
}
结果为:
转换后的二进制地址为:134480385
1.2.4.8