#include "../unpv13e/lib/unp.h"
#include <string.h>
int inet_pton_loose(int family,const char *strptr,void *addrptr){
int res;
if(family==AF_INET){
if((res=inet_pton(family,strptr,addrptr))>0)
return(1);//成功返回1
else if(res==0){
if((res=inet_aton(strptr,(struct in_addr *)addrptr))==0){
return(0);//失败返回0(格式错误)
}
return(1);
}
}
if(family==AF_INET6){
if((res=inet_pton(family,strptr,addrptr))>0)
return(1);
else if(res==0){
if((res=inet_aton(strptr,(struct in_addr *)addrptr))==0){
return(0);
}
return(1);
}
}
return(-1);//协议族错误返回-1
}
int main(int argc,char**argv){
if(argc<3){
printf("input format:./main <family> <address>\n");
return 1;
}
struct in_addr addr;
int res,family;
bzero(&addr,sizeof(in_addr_t));
if(strcmp(argv[1],"AF_INET")==0){
printf("IPV4 used: convert is preparing\n");
family=AF_INET;
}
else if(strcmp(argv[1],"AF_INET6")==0){
printf("IPV6 used: convert is preparing\n");
family=AF_INET6;
}
if((res=inet_pton_loose(family,argv[2],(void*)&addr))<=0)
printf("fail");
else {
printf("success");
printf("the address is %08x\n",ntohl(addr.s_addr));//网络字节序和本机字节序的转换
}
return 0;
}
参考自Unix网络编程学习笔记课后题(Chapter 3)_Ethan95的博客-优快云博客做了一些修改
有点不知道遇到错误该怎么写(比如函数返回是0这样的)有什么错误宏名是
该代码实现了一个inet_pton_loose函数,它尝试将字符串形式的IP地址转换为二进制格式。如果inet_pton失败,函数会尝试使用inet_aton进行转换。在main函数中,根据用户输入的地址族(IPv4或IPv6)进行转换,并打印结果。当转换失败时,输出“fail”。
701

被折叠的 条评论
为什么被折叠?



