博客
关于我
POCO库中文编程参考指南(4)Poco::Net::IPAddress
阅读量:804 次
发布时间: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/

你可能感兴趣的文章
python socket分包发送数据
查看>>
python socket模块_Python socket模块实现TCP服务端客户端
查看>>
Python SOCKS5代理客户端HTTPS
查看>>
Python Soc网络分析:通过使用函数迭代列表来计算机会网络
查看>>
Python Sphinx自动摘要:成员函数的自动列表
查看>>
Python SQL和NoSQL数据库操作实战
查看>>
python stdout flush_sys.stdout.flush()方法的用法
查看>>
python string 运算
查看>>
Python str与bytes之间的转换
查看>>
Python subprocess ffmpeg
查看>>
python subprocess Permission denied Errno 13
查看>>
Python subprocess.call - 将变量添加到 subprocess.call
查看>>
Python Subprocess.Popen 从一个线程
查看>>
Python subprocess.Popen 作为 Windows 上的不同用户
查看>>
Python subprocess.Popen() 等待完成
查看>>
Python sum 二维列表中具有相同第一个值的元素
查看>>
Python Sympy模块NoConversion:收敛到根失败;请尝试n<;15或MaxSteps>;50
查看>>
python time模块
查看>>
Python Tkinter Multiple Windows 教程
查看>>
Python tkinter 中的多处理
查看>>