您的位置:首页 > 理论基础 > 数据结构算法

网络地址相关数据结构与函数

2012-04-25 23:42 295 查看
函数声明:char*inet_ntoa(structin_addr);

函数功能:将网络地址转换成“.”点隔的字符串格式。

函数声明:intinet_aton(constchar*string,structin_addr*addr);

函数功能:将一个字符串IP地址转换为一个32位的网络序列IP地址。

参数描述:1输入参数string包含ASCII表示的IP地址。 

2输出参数addr是将要用新的IP地址更新的结构

函数声明:in_addr_tinet_addr(constchar*cp);

函数功能:将一个点间隔地址cp转换成一个in_addr 

structsockaddr_insock;

sock.sin_addr.s_addr=inet_addr("192.168.0.1");

函数声明:intinet_pton(intaf,constchar*src,void*dst);

函数功能:转换字符串到网络地址,第一个参数af是地址族AF_INET或AF_INET6,转换后存在dst中

函数声明:constchar*inet_ntop(intaf,constvoid*src,char*dst,socklen_tcnt);

函数功能:转换网络二进制结构到ASCII类型的地址,参数的作用和上面相同,只是多了一个参数socklen_tcnt,他是所指向缓存区dst的大小,避免溢出,如果缓存区太小无法存储地址的值,则返回一个空指针,并将errno置为ENOSPC

structsockaddr
{
unsignedshortsa_family;/*addressfamily,AF_xxx*/
charsa_data[14];/*14bytesofprotocoladdress*/
};

structsockaddr_in
{  
shortintsin_family;/*Addressfamily*/  
unsignedshortintsin_port;/*Portnumber*/  
structin_addrsin_addr;/*Internetaddress*/  
unsignedcharsin_zero[8];/*Samesizeasstructsockaddr*/  
};

/*in_addr_t其实是unsignedlong,一个无符号32位整型数*/ 
structin_addr
{  
in_addr_ts_addr; 
};

structin_addr
{
union
{
struct{u_chars_b1,s_b2,s_b3,s_b4;}S_un_b;
struct{u_shorts_w1,s_w2;}S_un_w;
u_longS_addr;
}S_un;
#defines_addrS_un.S_addr
};

intmain(void)  
{  
charIPdotdec[20]={"192.168.1.1"};//存放点分十进制IP地址  
structin_addrs;//IPv4地址结构体  
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);  
}



 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: