博客
关于我
POCO库中文编程参考指南(4)Poco::Net::IPAddress
阅读量:794 次
发布时间:2023-03-03

本文共 2687 字,大约阅读时间需要 8 分钟。

POCO库中文编程参考指南(4)- Poco::Net::IPAddress

作者信息

  • 作者:柳大·Poechant
  • 博客:
  • 邮箱:zhongchao.ustc@gmail.com
  • 日期:April 14th, 2012

POCO::Net::IPAddress

地址类型与长度

  • POCO通过in_addrin6_addr数据结构表示IPv4和IPv6地址。
  • MAX_ADDRESS_LENGTH宏定义了地址的最大长度:
    #if defined(POCO_HAVE_IPv6)  sizeof(struct in6_addr)#else  sizeof(struct in_addr)#endif

IP地址类型判断

  • POCO提供了Family枚举类来表示地址类型:
    enum Family {  IPv4,  IPv6}

构造函数

1. 默认构造函数

  • 创建一个全0的IP地址:
    IPAddress();

2. 拷贝构造函数

  • 拷贝另一个IP地址:
    IPAddress(const IPAddress& addr);

3. 指定类型构造函数

  • 创建一个全0的IP地址,并指定类型(IPv4或IPv6):
    explicit IPAddress(Family family);

4. 字符串构造函数

  • 通过字符串创建IP地址,IPv4使用十进制格式,IPv6使用十六进制格式:
    explicit IPAddress(const std::string& addr);
  • 通过字符串和指定类型创建IP地址:
    IPAddress(const std::string& addr, Family family);

5. 原生数据结构构造函数

  • 通过in_addrin6_addr数据结构创建IP地址,并提供字符串长度:
    IPAddress(const void* addr, poco_socklen_t length);
  • 通过in_addrin6_addr数据结构创建IP地址,并提供字符串长度和IPv6的作用域:
    IPAddress(const void* addr, poco_socklen_t length, Poco::UInt32 scope);

运算符重载

赋值运算符

  • 赋值操作:
    IPAddress& operator = (const IPAddress& addr);

比较运算符

  • 允许比较两个IP地址:
    bool operator == (const IPAddress& addr) const;bool operator != (const IPAddress& addr) const;bool operator < (const IPAddress& addr) const;bool operator <= (const IPAddress& addr) const;bool operator > (const IPAddress& addr) const;bool operator >= (const IPAddress& addr) const;

常用操作

swap函数

  • 交换IP地址内容:
    void swap(IPAddress& address);

获取属性

  • 获取地址类型:
    Family family() const;
  • 获取IPv6的作用域标识符(IPv4返回0):
    Poco::UInt32 scope() const;

转换操作

  • 将IP地址转换为字符串:
    std::string toString() const;
  • 获取地址长度:
    poco_socklen_t length() const;
  • 获取原始地址数据:
    const void* addr() const;
  • 获取地址-family:
    int af() const;

IP地址操作

  • 应用掩码操作:
    void mask(const IPAddress& mask);void mask(const IPAddress& mask, const IPAddress& set);
  • 静态解析函数:
    static IPAddress parse(const std::string& addr);
  • 静态解析函数(返回是否解析成功):
    static bool tryParse(const std::string& addr, IPAddress& result);
  • 创建 wildcard(任意地址):
    static IPAddress wildcard(Family family = IPv4);
  • 创建 broadcast(广播地址):
    static IPAddress broadcast();

IS函数

是否是未初始化状态(wildcard)

  • 判断是否是全0地址:
    bool isWildcard() const;

是否是广播/组播/单播地址

  • 判断是否是广播地址(仅IPv4):
    bool isBroadcast() const;
  • 判断是否是回环地址:
    bool isLoopback() const;
  • 判断是否是多播地址:
    bool isMulticast() const;
  • 判断是否是单播地址:
    bool isUnicast() const;

其他IP属性判断

  • 判断是否是链路本地地址:
    bool isLinkLocal() const;
  • 判断是否是站点本地地址:
    bool isSiteLocal() const;
  • 判断是否是IPv4兼容地址:
    bool isIPv4Compatible() const;
  • 判断是否是映射到IPv4地址:
    bool isIPv4Mapped() const;
  • 判断是否是已知的多播组(MC):
    bool isWellKnownMC() const;
  • 判断是否是链路本地多播组(LLMC):
    bool isLinkLocalMC() const;
  • 判断是否是站点本地多播组(SLMC):
    bool isSiteLocalMC() const;
  • 判断是否是组织本地多播组(OLMC):
    bool isOrgLocalMC() const;
  • 判断是否是全局多播组(GMLMC):
    bool isGlobalMC() const;

protected函数

  • 初始化IP地址实现:
    protected:  void init(IPAddressImpl* pImpl);

以上内容为POCO库POCO::Net::IPAddress类的完整编程参考指南。

转载地址:http://tzxfk.baihongyu.com/

你可能感兴趣的文章
php语言优劣
查看>>
PHP语言最优雅的支付SDK扩展包
查看>>
PHP请求https域名发生segment fault段错误
查看>>
PHP读写XML文件
查看>>
PHP读写XML文件
查看>>
R&Python Data Science 系列:数据处理(3)
查看>>
php读取xml 数据库字段超长处理
查看>>
php课程 12-40 抽象类的作用是什么
查看>>
php课程 4-16 数组自定义函数(php数组->桶)
查看>>
PHP调用接口用post方法传送json数据
查看>>
php转化IP为整形
查看>>
php输出数据到csv文件
查看>>
php输出语句
查看>>
php运行原理详细说明
查看>>
php运行环境出现Undefined index 或variable时解决方法
查看>>
php进程通信
查看>>
R&Python Data Science 系列:数据处理(2)
查看>>
php递归算法总结
查看>>
PHP递归遍历文件夹
查看>>
R&Python Data Science 系列:数据处理(1)
查看>>