POCO庫中文程式設計參考指南(4)Poco::Net::IPAddress

鍾超發表於2012-04-15

POCO庫中文程式設計參考指南(4)Poco::Net::IPAddress

  • 作者:柳大·Poechant
  • 部落格:Blog.CSDN.net/Poechant
  • 郵箱:zhongchao.ustc#gmail.com (# -> @)
  • 日期:April 14th, 2012

1 Poco::Net::IPAddress

地址最大長度,IPv4 是 in_addr 的長度,IPv6 是 in6_addr 的長度

enum
{
    MAX_ADDRESS_LENGTH = 
#if defined(POCO_HAVE_IPv6)
        sizeof(struct in6_addr)
#else
        sizeof(struct in_addr)
#endif
        /// Maximum length in bytes of a socket address.
};

1.1 IPv4 or IPv6?

POCO 用一個列舉類來表示:

enum Family
    /// Possible address families for IP addresses.
{
    IPv4,
    IPv6
};

1.2 建構函式

返回一個全 0 的 IP 地址:

IPAddress();

拷貝建構函式:

IPAddress(const IPAddress& addr);

根據 IP 型別(IPv4 或 IPv6)建立一個全 0 的 IP 地址:

explicit IPAddress(Family family);

用字串型別的 IPv4 地址或 IPv6 地址來建立一個 IP 地址,其中 IPv4 是十進位制表示的,IPv6 是十六進位制表示的:

explicit IPAddress(const std::string& addr);

用字串型別的 IP 地址和指定的型別(IPv4 或 IPv6)建立一個 IP 地址,其中 IPv4 是十進位制表示的,IPv6 是十六進位制表示的:

IPAddress(const std::string& addr, Family family);

用原生 IP 地址 in_addr 或 in6_addr 資料結構和給定的字串長度,建立一個 IPAddress:

IPAddress(const void* addr, poco_socklen_t length);

用原生 IP 地址 in_addr 或 in6_addr 資料結構和給定的字串長度,建立一個 IPAddress,其中 scope 引數用於 IPv6,IPv4 會忽略這個引數:

IPAddress(const void* addr, poco_socklen_t length, Poco::UInt32 scope);

1.3 過載運算子

賦值運算子:

IPAddress& operator = (const IPAddress& addr);

比較運算子

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;

1.4 常用操作

swap:

void swap(IPAddress& address);

獲取地址型別:

Family family() const;

IPv6 專用函式,返回 scope identifier,如果是 IPv4 則返回 0:

Poco::UInt32 scope() const;

toString,IPv4 則顯示“d.d.d.d”,IPv6 則

std::string toString() const;

poco_socklen_t length() const;

const void* addr() const;

int af() const;

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);

static IPAddress wildcard(Family family = IPv4);

static IPAddress broadcast();

1.5 IS 函式

1.5.1 是否是未初始化狀態

是否是未初始化的全零狀態(wildcard):

bool isWildcard() const;

1.5.2 是否是廣播/組播/單播

是否是廣播地址(全零),與 wildcard 的區別是 wildcard 是未經過初始化的。只有 IPv4 有廣播地址,IPv6 則返回 false。

bool isBroadcast() const;

是否是迴環地址:

  • 對於 IPv4 是127.0.0.1
  • 對於 IPv6 是::1

函式原型:

bool isLoopback() const;

是否是多播:

  • 對於 IPv4 是224.0.0.0239.255.255.255範圍;
  • 對於 IPv6 是FFxx:x:x:x:x:x:x:x的範圍:

函式原型:

bool isMulticast() const;

是否是單播:

bool isUnicast() const;

1.5.2 其他函式

bool isLinkLocal() const;
bool isSiteLocal() const;
bool isIPv4Compatible() const;
bool isIPv4Mapped() const;
bool isWellKnownMC() const;
bool isNodeLocalMC() const;
bool isLinkLocalMC() const;
bool isSiteLocalMC() const;
bool isOrgLocalMC() const;
bool isGlobalMC() const;

1.5 protected 函式

protected:
    void init(IPAddressImpl* pImpl);

-

轉載請註明來自柳大的CSDN部落格:Blog.CSDN.net/Poechant

-

相關文章