ACE-IP包装ACE_INET_Addr类

来源:互联网 发布:热血江湖源码 编辑:程序博客网 时间:2024/06/08 08:28

ACE对于IP地址的包装类主要是在INET_Addr.h文件,类ACE_INET_Addr中。

ACE_INET_Addr类继承自ACE_Addr类(位于Addr.h中),ACE_Addr定义了独立地址族的基类,一般是不直接使用该类或继承该类。

ACE_INET_Addr的构造函数函数比较经典的使用方式是下面两种

ACE_INET_Addr add1(9000, "192.168.1.1");ACE_INET_Addr add1("192.168.1.1:9000");

对于默认的空构造函数,默认端口为0,地址为0,也就是INADDR_ANY


常用函数:

ACE_UINT32 get_ip_address(vloid):获取ACE_INET_Addr对象的IP地址,返回主机字节顺序的4字节表达式。

u_short get_port_number(vloid):获取ACE_INET_Addr对象的端口,主机字节顺序。

const char *get_host_addr(void):获取ACE_INET_Addr对象的点分十进制形式的IP地址,返回值为指针

const char *get_host_addr (char *addr, int addr_size) const:”可重入版本

const char *get_host_name(void):获取ACE_INET_Addr对象中的主机名(待详解)

bool is_any (void) const:如果IP地址是INADDR_ANY 或 IN6ADDR_ANY返回true

bool is_loopback (void) const;:如果IP是loopback地址返回true

bool is_multicast (void) const;:如果IP是组播地址,返回true

void set_port_number (u_short, int encode = 1):设置端口,默认为主机字节顺序,如果encode为0,则认为该字节为网络字节顺序

int addr_to_string (ACE_TCHAR buffer[], size_t size, int ipaddr_format = 1):将ACE_INET_Addr对象转换为ip-number:port-number形式,如果ipaddr_format 为0,则转换为ip-name:port-number形式,存储于buffer中,size为buffer的大小,如果成功返回0,错误返回-1

int set (u_short port_number, ACE_UINT32 ip_addr = INADDR_ANY, int encode = 1, int map = 0):设置端口与IP地址(4字节表达式形式),如果encode为1认为参数为主机字节形式,map为0表示只支持IPv4,非0表示支持IPv6.

int set (u_short port_number, const char host_name[], int encode = 1, int address_family = AF_UNSPEC):设置端口与IP地址(点分十进制形式)

示例程序:

#include <iostream>#include <ace/ACE.h>  #include <ace/Init_ACE.h> #include <ace/INET_Addr.h>using namespace std;int main(){    char cc[256];        ACE_INET_Addr add("192.168.1.1:10000");    cout<<"返回add"<<endl;    add.addr_to_string(cc, 256);    cout<<cc<<endl;            cout<<"返回主机字节顺序4字节IP"<<endl;    cout<<add.get_ip_address()<<endl;        cout<<"htonl转换为网络字节顺序IP"<<endl;    cout<<htonl(add.get_ip_address())<<endl;        cout<<"返回端口"<<endl;    cout<<add.get_port_number()<<endl;        cout<<"返回点分十进制IP"<<endl;    cout<<add.get_host_addr()<<endl;        cout<<"返回主机名"<<endl;    cout<<add.get_host_name()<<endl;        cout<<"如果空构造函数那么IP和主机名为"<<endl;    ACE_INET_Addr ad;    cout<<ad.get_host_addr()<<endl;    cout<<ad.get_host_name()<<endl;    cout<<ad.is_any()<<endl;        add.set_port_number(9000);    cout<<"设置端口为9000后"<<endl;    cout<<add.get_port_number()<<endl;        cout<<"设置4字节IP: 3232235777,端口为8000"<<endl;    add.set(8000, 3232235777);    add.addr_to_string(cc, 256);    cout<<cc<<endl;        cout<<"设置点分十进制IP: 192.168.1.3,端口为7000"<<endl;    add.set(7000, "192.168.1.3");    add.addr_to_string(cc, 256);    cout<<cc<<endl;        return 0;}