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;}
- ACE-IP包装ACE_INET_Addr类
- ACE学习手记----ACE_INET_Addr类
- ACE - ACE_INET_Addr, ACE_SOCK_Acceptor, ACE_SOCK_Connector, ACE_SOCK_Stream
- ACE中UDP通信ACE_INET_Addr类ACE_SOCK_Acceptor类ACE_SOCK_Connector类ACE_SOCK_Stream
- ACE学习之ACE_INET_Addr,ACE_SOCK_Acceptor 源代码
- ACE_INET_Addr
- ACE_INET_Addr
- ACE_INET_Addr地址类浅解析
- ACE Socket包装外观
- ACE笔记:(2)包装外观(Wrapper Facade)
- 包装类
- 包装类
- 包装类
- 包装类
- 包装类
- 包装类
- 包装类
- 包装类
- Linux服务器下PHPMailer发送邮件失败问题的解决
- 【云星数据---mesos实战系列002】:mesos全分布式部署实战003--zookeeper全分布式部署准备
- 2017.11.9
- 【模板】线性筛素数(埃筛+欧筛)
- PHP中利用redis实现消息队列处理高并发请求
- ACE-IP包装ACE_INET_Addr类
- scrapy framework
- vb
- hdu 5175 思维
- 线性表的顺序动态存储——C语言实现简单函数
- Android-Intent简单学习
- Tomcat的安装与卸载
- NOIP2017 检查清单
- 计算C(2n, n)