Класс QHostAddress
Класс QHostAddress предоставляет IP-адрес. Подробнее...
| Заголовок: | #include <QHostAddress> |
| qmake: | QT += network |
Открытые типы
| флаги | ConversionMode |
| Перечисление | ConversionModeFlag { StrictConversion, ConvertV4MappedToIPv4, ConvertV4CompatToIPv4, ConvertLocalHost, ConvertUnspecifiedAddress, TolerantConversion } |
| Перечисление | SpecialAddress { Null, LocalHost, LocalHostIPv6, Broadcast, ..., Any } |
Открытые функции
| QHostAddress(QHostAddress::SpecialAddress address) | |
| QHostAddress(const QHostAddress &address) | |
| QHostAddress(const QString &address) | |
| QHostAddress(const sockaddr *sockaddr) | |
| QHostAddress(const Q_IPV6ADDR &ip6Addr) | |
| QHostAddress(const quint8 *ip6Addr) | |
| QHostAddress(quint8 *ip6Addr) | |
| QHostAddress(quint32 ip4Addr) | |
| QHostAddress() | |
| QHostAddress & | operator=(const QString &address) |
| QHostAddress & | operator=(const QHostAddress &address) |
| ~QHostAddress() | |
| void | clear() |
| bool | isBroadcast() const |
| bool | isEqual(const QHostAddress &other, QHostAddress::ConversionMode mode = TolerantConversion) const |
| bool | isGlobal() const |
| bool | isInSubnet(const QHostAddress &subnet, int netmask) const |
| bool | isInSubnet(const QPair<QHostAddress, int> &subnet) const |
| bool | isLinkLocal() const |
| bool | isLoopback() const |
| bool | isMulticast() const |
| bool | isNull() const |
| bool | isSiteLocal() const |
| bool | isUniqueLocalUnicast() const |
| QAbstractSocket::NetworkLayerProtocol | protocol() const |
| QString | scopeId() const |
| void | setAddress(quint32 ip4Addr) |
| bool | operator!=(const QHostAddress &other) const |
| bool | operator!=(QHostAddress::SpecialAddress other) const |
| QHostAddress & | operator=(QHostAddress::SpecialAddress address) |
| bool | operator==(const QHostAddress &other) const |
| bool | operator==(QHostAddress::SpecialAddress other) const |
Статические публичные члены
| QPair<QHostAddress, int> | parseSubnet(const QString &subnet) |
Связанные нечлены
| uint | qHash(const QHostAddress &key, uint seed = 0) |
| bool | operator!=(QHostAddress::SpecialAddress lhs, const QHostAddress &rhs) |
| QDataStream & | operator<<(QDataStream &out, const QHostAddress &address) |
| bool | operator==(QHostAddress::SpecialAddress lhs, const QHostAddress &rhs) |
| QDataStream & | operator>>(QDataStream &in, QHostAddress &address) |
Подробное описание
Этот класс хранит адрес IPv4 или IPv6 в платформенно- и протокол-независимом формате.
QHostAddress обычно используется с QTcpSocket, QTcpServer и QUdpSocket для подключения к хосту или создания сервера.
Адрес хоста устанавливается с помощью setAddress(), и извлекается с помощью toIPv4Address(), toIPv6Address() или toString(). Тип можно проверить с помощью protocol().
Примечание: Обратите внимание, что QHostAddress не выполняет DNS-поиски. Для этого нужен QHostInfo.
Класс также поддерживает стандартные предопределённые адреса: Null, LocalHost, LocalHostIPv6, Broadcast и Any.
См. также QHostInfo, QTcpSocket, QTcpServer и QUdpSocket.
Документация по типам членов
enum QHostAddress::ConversionModeFlagflags QHostAddress::ConversionMode
| Постоянная | Значение | Описание |
|---|---|---|
QHostAddress::StrictConversion |
0 |
Не преобразовывать IPv6-адреса в IPv4 при сравнении двух объектов QHostAddress с разными протоколами, чтобы они всегда считались разными. |
QHostAddress::ConvertV4MappedToIPv4 |
1 |
Преобразовывать IPv4-адреса IPv6 (RFC 4291 раздел 2.5.5.2) при сравнении. Таким образом, QHostAddress("::ffff:192.168.1.1") будет равняться QHostAddress("192.168.1.1"). |
QHostAddress::ConvertV4CompatToIPv4 |
2 |
Преобразовывать IPv4-совместимые IPv6-адреса (RFC 4291 раздел 2.5.5.1) при сравнении. Таким образом, QHostAddress("::192.168.1.1") будет равняться QHostAddress("192.168.1.1"). |
QHostAddress::ConvertLocalHost |
8 |
Преобразовывать IPv6-адреса обратной связи в их IPv4 эквивалент при сравнении. Поэтому, например, QHostAddress("::1") будет равняться QHostAddress("127.0.0.1"). |
QHostAddress::ConvertUnspecifiedAddress |
4 |
Все неопределённые адреса будут равны, а именно AnyIPv4, AnyIPv6 и Any. |
QHostAddress::TolerantConversion |
0xff |
Устанавливает все три предыдущих флага. |
Этот перечисление был введён или изменён в Qt 5.8.
Тип ConversionMode является псевдонимом для QFlags<ConversionModeFlag>. Он хранит комбинацию значений ConversionModeFlag, полученную с помощью операции ИЛИ.
См. также isEqual().
enum QHostAddress::SpecialAddress
| Постоянная | Значение | Описание |
|---|---|---|
QHostAddress::Null |
0 |
Объект нулевого адреса. Эквивалентно QHostAddress(). См. также QHostAddress::isNull(). |
QHostAddress::LocalHost |
2 |
Адрес локального хоста IPv4. Эквивалентно QHostAddress("127.0.0.1"). |
QHostAddress::LocalHostIPv6 |
3 |
Адрес локального хоста IPv6. Эквивалентно QHostAddress("::1"). |
QHostAddress::Broadcast |
1 |
Адрес широковещательной рассылки IPv4. Эквивалентно QHostAddress("255.255.255.255"). |
QHostAddress::AnyIPv4 |
6 |
Любой адрес IPv4. Эквивалентно QHostAddress("0.0.0.0"). Сокет, привязанный к этому адресу, будет слушать только на IPv4 интерфейсах. |
QHostAddress::AnyIPv6 |
5 |
Любой адрес IPv6. Эквивалентно QHostAddress("::"). Сокет, привязанный к этому адресу, будет слушать только на IPv6 интерфейсах. |
QHostAddress::Any |
4 |
Любой адрес с двойной стековой поддержкой. Сокет, привязанный к этому адресу, будет слушать как на IPv4, так и на IPv6 интерфейсах. |
Документация по функциям членов
QHostAddress::QHostAddress(QHostAddress::SpecialAddress address)
Создаёт объект QHostAddress для address.
QHostAddress::QHostAddress(const QHostAddress &address)
Создаёт копию указанного address.
QHostAddress::QHostAddress(const QString &address)
Создаёт адрес IPv4 или IPv6, основанный на строке address (например, "127.0.0.1").
См. также setAddress().
QHostAddress::QHostAddress(const sockaddr *sockaddr)
Создаёт адрес IPv4 или IPv6, используя адрес, указанный в родной структуре sockaddr.
См. также setAddress().
QHostAddress::QHostAddress(const Q_IPV6ADDR &ip6Addr)
Создаёт объект адреса хоста с IPv6-адресом ip6Addr.
QHostAddress::QHostAddress(const quint8 *ip6Addr)
Создаёт объект адреса хоста с IPv6-адресом ip6Addr.
ip6Addr должен быть массивом из 16 байтов в сетевом порядке байтов (big endian).
Эта функция была добавлена в Qt 5.5.
QHostAddress::QHostAddress(quint8 *ip6Addr)
Создаёт объект адреса хоста с IPv6-адресом ip6Addr.
ip6Addr должен быть массивом из 16 байтов в сетевом порядке байтов (big endian).
QHostAddress::QHostAddress(quint32 ip4Addr)
Создаёт объект адреса хоста с IPv4-адресом ip4Addr.
QHostAddress::QHostAddress()
Создаёт объект нулевого адреса хоста, т.е. адреса, не действительного для любого хоста или интерфейса.
См. также clear().
QHostAddress &QHostAddress::operator=(const QString &address)
Присваивает адрес хоста address этому объекту и возвращает ссылку на этот объект.
См. также setAddress().
QHostAddress &QHostAddress::operator=(const QHostAddress &address)
Присваивает адрес другого хоста address этому объекту и возвращает ссылку на этот объект.
QHostAddress::~QHostAddress()
Уничтожает объект адреса хоста.
void QHostAddress::clear()
Устанавливает адрес хоста в значение null и устанавливает протокол в QAbstractSocket::UnknownNetworkLayerProtocol.
См. также QHostAddress::Null.
bool QHostAddress::isBroadcast() const
Возвращает true если адрес является адресом широковещательной рассылки IPv4, false в противном случае. Адрес широковещательной рассылки IPv4 составляет 255.255.255.255.
Обратите внимание, что эта функция не возвращает true для адреса локальной широковещательной рассылки сети IPv4. Для этого используйте QNetworkInterface для получения адресов широковещательной рассылки локальной машины.
Эта функция была добавлена в Qt 5.11.
См. также isLoopback(), isGlobal(), isMulticast(), isLinkLocal() и isUniqueLocalUnicast().
bool QHostAddress::isEqual(const QHostAddress &other, QHostAddress::ConversionMode mode = TolerantConversion) const
Возвращает true если адрес этого хоста совпадает с указанным адресом other; в противном случае возвращает false.
Параметр mode управляет преобразованиями между адресами различных протоколов. Если mode не указан, по умолчанию выполняется TolerantConversion.
Эта функция была добавлена в Qt 5.8.
См. также ConversionMode и operator==().
bool QHostAddress::isGlobal() const
Возвращает true если адрес является глобальным IPv4 или IPv6 адресом, false в противном случае. Глобальный адрес — это адрес, который не зарезервирован для специальных целей (например, обратной петли или многоадресной рассылки) или будущих целей.
Обратите внимание, что уникальные локальные одноадресные адреса IPv6 считаются глобальными адресами (см. isUniqueLocalUnicast()), так же как и IPv4 адреса, зарезервированные для локальных сетей по RFC 1918.
Также обратите внимание, что адреса IPv6 типа "site-local" устарели и должны рассматриваться как глобальные в новых приложениях. Эта функция также возвращает true для адресов типа "site-local".
Эта функция была добавлена в Qt 5.11.
См. также isLoopback(), isSiteLocal() и isUniqueLocalUnicast().
bool QHostAddress::isInSubnet(const QHostAddress &subnet, int netmask) const
Возвращает true если этот IP-адрес находится в подсети, описанной сетевым префиксом subnet и маской сети netmask.
IP-адрес считается принадлежащим подсети, если он находится между самым низким и самым высоким адресами в этой подсети. В случае IP версии 4 самым низким адресом является сетевой адрес, а самым высоким — адрес широковещательной рассылки.
Аргумент subnet не обязательно должен быть фактическим сетевым адресом (самым низким адресом в подсети). Это может быть любой допустимый IP-адрес, принадлежащий этой подсети. В частности, если он равен IP-адресу, хранящемуся в этом объекте, эта функция всегда вернёт true (при условии, что маска сети является допустимым значением).
Эта функция была добавлена в Qt 4.5.
См. также parseSubnet().
bool QHostAddress::isInSubnet(const QPair<QHostAddress, int> &subnet) const
Это перегруженная функция.
Возвращает true если этот IP-адрес находится в подсети, описанной subnet. Член QHostAddress в subnet содержит сетевой префикс, а член int (второй) содержит маску сети (длину префикса).
Эта функция была добавлена в Qt 4.5.
bool QHostAddress::isLinkLocal() const
Возвращает true если адрес является локальным адресом IPv4 или IPv6, false в противном случае.
Локальный адрес IPv4 — это адрес в сети 169.254.0.0/16. Локальный адрес IPv6 — это адрес в сети fe80::/10. См. реестр IANA IPv6 Address Space для получения дополнительной информации.
Эта функция была добавлена в Qt 5.11.
См. также isLoopback(), isGlobal(), isMulticast(), isSiteLocal() и isUniqueLocalUnicast().
bool QHostAddress::isLoopback() const
Возвращает true если адрес является адресом IPv6 обратной петли или любым из адресов IPv4 обратной петли.
Эта функция была добавлена в Qt 5.0.
bool QHostAddress::isMulticast() const
Возвращает true если адрес является многоадресным адресом IPv4 или IPv6, false в противном случае.
Эта функция была добавлена в Qt 5.6.
См. также isLoopback(), isGlobal(), isLinkLocal(), isSiteLocal() и isUniqueLocalUnicast().
bool QHostAddress::isNull() const
Возвращает true если этот адрес хоста не является допустимым для любого хоста или интерфейса.
Конструктор по умолчанию создаёт нулевой адрес.
См. также QHostAddress::Null.
bool QHostAddress::isSiteLocal() const
Возвращает true если адрес является локальным адресом IPv6 типа "site-local", false в противном случае.
Локальный адрес IPv6 типа "site-local" — это адрес в сети fec0::/10. См. реестр IANA IPv6 Address Space для получения дополнительной информации.
Адреса IPv6 типа "site-local" устарели и не должны использоваться в новых приложениях. Новые приложения не должны полагаться на эту функцию и должны рассматривать адреса типа "site-local" как глобальные (поэтому isGlobal() также возвращает true). Локальные адреса типа "site-local" были заменены уникальными локальными адресами (ULA).
Эта функция была добавлена в Qt 5.11.
См. также isLoopback(), isGlobal(), isMulticast(), isLinkLocal() и isUniqueLocalUnicast().
bool QHostAddress::isUniqueLocalUnicast() const
Возвращает true если адрес является уникальным локальным одноадресным адресом IPv6, false в противном случае.
Уникальный локальный одноадресной адрес IPv6 — это адрес в сети fc00::/7. См. реестр IANA IPv6 Address Space для получения дополнительной информации.
Обратите внимание, что уникальные локальные одноадресные адреса также считаются глобальными адресами. RFC 4193 гласит, что на практике «приложения могут рассматривать эти адреса как глобальные адреса». Только маршрутизаторы должны учитывать различие.
Эта функция была добавлена в Qt 5.11.
См. также isLoopback(), isGlobal(), isMulticast(), isLinkLocal() и isUniqueLocalUnicast().
[static] QPair<QHostAddress, int> QHostAddress::parseSubnet(const QString &subnet)
Парсит информацию об IP-адресе и подсети, содержащуюся в subnet, и возвращает сетевой префикс для этой сети и её длину префикса.
IP-адрес и маска сети должны быть разделены косой чертой (/).
Эта функция поддерживает аргументы в формате:
- 123.123.123.123/n, где n — любое значение от 0 до 32
- 123.123.123.123/255.255.255.255
- <ipv6-address>/n, где n — любое значение от 0 до 128
Для IP версии 4 эта функция также принимает отсутствующие конечные компоненты (т.е. меньше 4 октетов, например, "192.168.1"), с последующим или без точки. Если маска сети также отсутствует в этом случае, она устанавливается в количество фактически переданных октетов (в приведенном выше примере это будет 24, для 3 октетов).
Эта функция была добавлена в Qt 4.5.
См. также isInSubnet().
QAbstractSocket::NetworkLayerProtocol QHostAddress::protocol() const
Возвращает сетевой протокол адреса хоста.
QString QHostAddress::scopeId() const
Возвращает идентификатор области IPv6 адреса. Для IPv4 адресов или если адрес не содержит идентификатор области, возвращается пустая строка QString.
Идентификатор области IPv6 определяет область доступности для неглобальных IPv6 адресов, ограничивая область, в которой адрес может использоваться. Все IPv6 адреса связаны с такой областью доступности. Идентификатор области используется для устранения неоднозначности адресов, которые не гарантируют глобальную уникальность.
IPv6 определяет следующие четыре уровня доступности:
- Локальный для узла: адреса, которые используются только для связи с сервисами на том же интерфейсе (например, адрес обратной петли "::1").
- Локальный для канала: адреса, которые локальны для сетевого интерфейса (канала). Для каждого IPv6 интерфейса на вашем хосте всегда есть один локальный адрес для канала. Локальные адреса для канала ("fe80...") генерируются из MAC-адреса локального сетевого адаптера и не гарантируют уникальность.
- Глобальный: для глобально маршрутизируемых адресов, таких как публичные серверы в Интернете.
При использовании локального для канала или локального для сайта адреса для IPv6 подключений вы должны указать идентификатор области. Идентификатор области для локального для канала адреса обычно совпадает с именем интерфейса (например, "eth0", "en1") или номером (например, "1", "2").
Эта функция была добавлена в Qt 4.1.
См. также setScopeId(), QNetworkInterface и QNetworkInterface::interfaceFromName.
void QHostAddress::setAddress(quint32 ip4Addr)
Устанавливает IPv4 адрес, заданный ip4Addr.
void QHostAddress::setAddress(quint8 *ip6Addr)
Это перегруженная функция.
Устанавливает IPv6 адрес, заданный ip6Addr.
ip6Addr должен быть массивом из 16 байт в сетевом порядке байтов (старший байт в начале).
void QHostAddress::setAddress(const quint8 *ip6Addr)
Это перегруженная функция.
Устанавливает IPv6 адрес, заданный ip6Addr.
ip6Addr должен быть массивом из 16 байт в сетевом порядке байтов (старший байт в начале).
Эта функция была добавлена в Qt 5.5.
void QHostAddress::setAddress(const Q_IPV6ADDR &ip6Addr)
Это перегруженная функция.
Устанавливает IPv6 адрес, заданный ip6Addr.
void QHostAddress::setAddress(const sockaddr *sockaddr)
Это перегруженная функция.
Устанавливает адрес IPv4 или IPv6, заданный в структуре sockaddr. Возвращает true и устанавливает адрес, если адрес был успешно проанализирован; в противном случае возвращает false.
bool QHostAddress::setAddress(const QString &address)
Это перегруженный метод.
Устанавливает адрес IPv4 или IPv6, заданный строковым представлением address (например, "127.0.0.1"). Возвращает true и устанавливает адрес, если адрес был успешно проанализирован; в противном случае возвращает false.
void QHostAddress::setAddress(QHostAddress::SpecialAddress address)
Это перегруженный метод.
Устанавливает специальный адрес, заданный значением address.
Этот метод был введён в Qt 5.8.
void QHostAddress::setScopeId(const QString &id)
Устанавливает идентификатор области IPv6 адреса в id. Если протокол адреса не IPv6, этот метод ничего не делает. Идентификатор области может быть задан как имя интерфейса (например, "eth0" или "en1") или как целое число, представляющее индекс интерфейса. Если id является именем интерфейса, QtNetwork преобразует его в индекс интерфейса с помощью QNetworkInterface::interfaceIndexFromName() перед вызовом сетевых функций операционной системы.
Этот метод был введён в Qt 4.1.
См. также scopeId(), QNetworkInterface и QNetworkInterface::interfaceFromName.
void QHostAddress::swap(QHostAddress &other)
Меняет местами этот адрес хоста с other. Эта операция очень быстрая и никогда не терпит неудачу.
Этот метод был введён в Qt 5.6.
quint32 QHostAddress::toIPv4Address() const
Возвращает адрес IPv4 как число.
Например, если адрес — 127.0.0.1, возвращаемое значение равно 2130706433 (т.е. 0x7f000001).
Это значение является корректным, если protocol() равно IPv4Protocol или если протокол равен IPv6Protocol, а адрес IPv6 — это адрес IPv4 в формате сопоставления. (RFC4291)
См. также toString().
quint32 QHostAddress::toIPv4Address(bool *ok) const
Возвращает адрес IPv4 как число.
Например, если адрес — 127.0.0.1, возвращаемое значение равно 2130706433 (т.е. 0x7f000001).
Это значение является корректным, если protocol() равно IPv4Protocol или если протокол равен IPv6Protocol, а адрес IPv6 — это адрес IPv4 в формате сопоставления. (RFC4291). В этих случаях ok будет установлен в true. В противном случае он будет установлен в false.
См. также toString().
Q_IPV6ADDR QHostAddress::toIPv6Address() const
Возвращает адрес IPv6 в виде структуры Q_IPV6ADDR. Структура состоит из 16 беззнаковых символов.
Q_IPV6ADDR addr = hostAddr.toIPv6Address();
// addr contains 16 unsigned characters
for (int i = 0; i < 16; ++i) {
// process addr[i]
} Это значение является корректным, если protocol() равно IPv6Protocol. Если протокол равен IPv4Protocol, то адрес возвращается как адрес IPv6 в формате сопоставления с IPv4. (RFC4291)
См. также toString().
QString QHostAddress::toString() const
Возвращает адрес в виде строки.
Например, если адрес — IPv4-адрес 127.0.0.1, возвращаемая строка — "127.0.0.1". Для IPv6 формат строки будет соответствовать рекомендации RFC5952. Для QHostAddress::Any будет возвращён его IPv4-адрес ("0.0.0.0")
См. также toIPv4Address().
bool QHostAddress::operator!=(const QHostAddress &other) const
Возвращает true если адрес этого хоста не совпадает с заданным адресом other; в противном случае возвращает false.
Этот метод был введён в Qt 4.2.
bool QHostAddress::operator!=(QHostAddress::SpecialAddress other) const
Возвращает true если адрес этого хоста не совпадает с заданным адресом other; в противном случае возвращает false.
QHostAddress &QHostAddress::operator=(QHostAddress::SpecialAddress address)
Присваивает специальный адрес address этому объекту и возвращает ссылку на этот объект.
Этот метод был введён в Qt 5.8.
См. также setAddress().
bool QHostAddress::operator==(const QHostAddress &other) const
Возвращает true если адрес этого хоста совпадает с заданным адресом other; в противном случае возвращает false. Этот оператор просто вызывает isEqual(other, StrictConversion).
См. также isEqual().
bool QHostAddress::operator==(QHostAddress::SpecialAddress other) const
Возвращает true если адрес этого хоста совпадает с заданным адресом other; в противном случае возвращает false.
Связанные внешние функции
uint QHostAddress::qHash(const QHostAddress &key, uint seed = 0)
Возвращает хэш адреса хоста key, используя seed для инициализации вычисления.
Этот метод был введён в Qt 5.0.
bool QHostAddress::operator!=(QHostAddress::SpecialAddress lhs, const QHostAddress &rhs)
Возвращает false если специальный адрес lhs равен адресу хоста rhs; в противном случае возвращает true.
Этот метод был введён в Qt 5.9.
См. также isEqual().
QDataStream &QHostAddress::operator<<(QDataStream &out, const QHostAddress &address)
Записывает адрес хоста address в поток out и возвращает ссылку на поток.
См. также Сериализация типов данных Qt.
bool QHostAddress::operator==(QHostAddress::SpecialAddress lhs, const QHostAddress &rhs)
Возвращает true если специальный адрес lhs равен адресу хоста rhs; в противном случае возвращает false.
См. также isEqual().
QDataStream &QHostAddress::operator>>(QDataStream &in, QHostAddress &address)
Считывает адрес хоста в address из потока in и возвращает ссылку на поток.
См. также Сериализация типов данных Qt.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.13/qhostaddress.html