Класс QHostAddress
Класс QHostAddress предоставляет IP-адрес. Подробнее...
| Заголовок: | #include <QHostAddress> |
| CMake: | find_package(Qt6 COMPONENTS Network REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Network) |
| qmake: | QT += network |
Открытые типы
| flags | ConversionMode |
| enum | ConversionModeFlag { StrictConversion, ConvertV4MappedToIPv4, ConvertV4CompatToIPv4, ConvertLocalHost, ConvertUnspecifiedAddress, TolerantConversion } |
| enum | SpecialAddress { Null, LocalHost, LocalHostIPv6, Broadcast, AnyIPv4, …, 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(quint32 ip4Addr) | |
| QHostAddress() | |
| 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) |
| void | setAddress(const quint8 *ip6Addr) |
| void | setAddress(const Q_IPV6ADDR &ip6Addr) |
| void | setAddress(const sockaddr *sockaddr) |
| bool | setAddress(const QString &address) |
| void | setAddress(QHostAddress::SpecialAddress address) |
| void | setScopeId(const QString &id) |
| void | swap(QHostAddress &other) |
| quint32 | toIPv4Address(bool *ok = nullptr) const |
| Q_IPV6ADDR | toIPv6Address() const |
| QString | toString() const |
| 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) |
Связанные внешние члены
| size_t | qHash(const QHostAddress &key, size_t 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 для подключения к хосту или настройки сервера.
IP-адрес устанавливается с помощью setAddress(), и извлекается с помощью toIPv4Address(), toIPv6Address() или toString(). Вы можете проверить тип с помощью protocol().
Примечание: Обратите внимание, что QHostAddress не выполняет DNS-поиски. Для этого необходим QHostInfo.
Класс также поддерживает стандартные предопределённые адреса: Null, LocalHost, LocalHostIPv6, Broadcast и Any.
См. также QHostInfo, QTcpSocket, QTcpServer и QUdpSocket.
Документация по типам членов
[since 5.8] перечисление QHostAddress::ConversionModeFlagфлаги QHostAddress::ConversionMode
| Константа | Значение | Описание |
|---|---|---|
QHostAddress::StrictConversion |
0 |
Не преобразовывать адреса IPv6 в IPv4 при сравнении двух объектов QHostAddress разных протоколов, чтобы они всегда считались разными. |
QHostAddress::ConvertV4MappedToIPv4 |
1 |
Преобразовывать IPv6-адреса, отображаемые в IPv4 (RFC 4291, раздел 2.5.5.2), при сравнении. Поэтому QHostAddress("::ffff:192.168.1.1") будет сравниваться как равный QHostAddress("192.168.1.1"). |
QHostAddress::ConvertV4CompatToIPv4 |
2 |
Преобразовывать IPv6-адреса, совместимые с IPv4 (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().
перечисление QHostAddress::SpecialAddress
| Константа | Значение | Описание |
|---|---|---|
QHostAddress::Null |
0 |
Объект нулевого адреса. Эквивалентен QHostAddress(). См. также QHostAddress::isNull(). |
QHostAddress::LocalHost |
2 |
Адрес localhost IPv4. Эквивалентен QHostAddress("127.0.0.1"). |
QHostAddress::LocalHostIPv6 |
3 |
Адрес localhost 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.
[since 5.5] QHostAddress::QHostAddress(const quint8 *ip6Addr)
Создаёт объект адреса хоста с адресом IPv6 ip6Addr.
ip6Addr должен быть 16-байтовым массивом в сетевом порядке байтов (big endian).
Эта функция была добавлена в Qt 5.5.
QHostAddress::QHostAddress(quint32 ip4Addr)
Создаёт объект адреса хоста с адресом IPv4 ip4Addr.
QHostAddress::QHostAddress()
Создаёт объект нулевого адреса хоста, т.е. адрес, недействительный для любого хоста или интерфейса.
См. также clear().
QHostAddress &QHostAddress::operator=(const QHostAddress &address)
Присваивает другой адрес хоста address этому объекту и возвращает ссылку на этот объект.
QHostAddress::~QHostAddress()
Удаляет объект адреса хоста.
void QHostAddress::clear()
Устанавливает адрес хоста в ноль и протокол в QAbstractSocket::UnknownNetworkLayerProtocol.
См. также QHostAddress::Null.
[since 5.11] bool QHostAddress::isBroadcast() const
Возвращает true, если адрес является адресом IPv4 широковещательной рассылки, false в противном случае. Адрес IPv4 широковещательной рассылки — 255.255.255.255.
Обратите внимание, что эта функция не возвращает true для адреса локальной широковещательной рассылки сети IPv4. Для этого используйте QNetworkInterface для получения адресов широковещательной рассылки локальной машины.
Эта функция была добавлена в Qt 5.11.
См. также isLoopback(), isGlobal(), isMulticast(), isLinkLocal() и isUniqueLocalUnicast().
[since 5.8] bool QHostAddress::isEqual(const QHostAddress &other, QHostAddress::ConversionMode mode = TolerantConversion) const
Возвращает true, если этот адрес хоста такой же, как заданный адрес other; в противном случае возвращает false.
Параметр mode управляет преобразованиями между адресами разных протоколов. Если mode не указан, по умолчанию выполняется TolerantConversion.
Эта функция была добавлена в Qt 5.8.
См. также ConversionMode и operator==().
[since 5.11] bool QHostAddress::isGlobal() const
Возвращает true, если адрес является глобальным адресом IPv4 или IPv6, false в противном случае. Глобальный адрес — это адрес, не зарезервированный для специальных целей (например, обратной связи или многоадресной рассылки) или будущих целей.
Обратите внимание, что уникальные локальные адреса IPv6 считаются глобальными адресами (см. isUniqueLocalUnicast()), а также адреса IPv4, зарезервированные для локальных сетей в соответствии с RFC 1918.
Также обратите внимание, что адреса IPv6 для локальной сети устарели и в новых приложениях должны рассматриваться как глобальные. Эта функция также возвращает true для адресов локальной сети.
Эта функция была добавлена в 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 (при условии, что маска сети является допустимым значением).
См. также parseSubnet().
bool QHostAddress::isInSubnet(const QPair<QHostAddress, int> &subnet) const
Это перегруженная функция.
Возвращает true если этот IP-адрес находится в подсети, описанной subnet. Член QHostAddress в subnet содержит сетевой префикс, а член int (второй) содержит маску сети (длина префикса).
[since 5.11] 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().
[since 5.0] bool QHostAddress::isLoopback() const
Возвращает true если адрес является IPv6 адресом обратной связи, или любым из IPv4 адресов обратной связи.
Эта функция была введена в Qt 5.0.
[since 5.6] bool QHostAddress::isMulticast() const
Возвращает true если адрес является IPv4 или IPv6 адресом групповой рассылки, false в противном случае.
Эта функция была введена в Qt 5.6.
См. также isLoopback(), isGlobal(), isLinkLocal(), isSiteLocal() и isUniqueLocalUnicast().
bool QHostAddress::isNull() const
Возвращает true если этот адрес хоста недействителен для любого хоста или интерфейса.
Конструктор по умолчанию создаёт нулевой адрес.
См. также QHostAddress::Null.
[since 5.11] bool QHostAddress::isSiteLocal() const
Возвращает true если адрес является IPv6 адресом локальной зоны, false в противном случае.
IPv6 адрес локальной зоны — это адрес в сети fec0::/10. См. реестр IANA IPv6 Address Space для получения дополнительной информации.
IPv6 адреса локальной зоны устарели и не должны использоваться в новых приложениях. Новые приложения не должны полагаться на эту функцию и должны рассматривать адреса локальной зоны так же, как глобальные (поэтому isGlobal() также возвращает true). Адреса локальной зоны были заменены уникальными локальными адресами (ULA).
Эта функция была введена в Qt 5.11.
См. также isLoopback(), isGlobal(), isMulticast(), isLinkLocal() и isUniqueLocalUnicast().
[since 5.11] 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-адрес>/n, где n — любое значение от 0 до 128
Для IP версии 4 эта функция также принимает пропущенные хвостовые компоненты (т.е. меньше 4 октетов, например «192.168.1»), за которыми или нет следует точка. Если маска сети также пропущена в этом случае, она устанавливается равной количеству фактически переданных октетов (в приведённом выше примере это будет 24, для 3 октетов).
См. также 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»).
См. также setScopeId(), QNetworkInterface и QNetworkInterface::interfaceFromName.
void QHostAddress::setAddress(quint32 ip4Addr)
Устанавливает IPv4 адрес, указанный в ip4Addr.
[since 5.5] 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.
[since 5.8] void QHostAddress::setAddress(QHostAddress::SpecialAddress address)
Это перегруженная функция.
Устанавливает специальный адрес, указанный в address.
Эта функция была введена в Qt 5.8.
void QHostAddress::setScopeId(const QString &id)
Устанавливает идентификатор области IPv6 адреса в id. Если протокол адреса не IPv6, эта функция ничего не делает. Идентификатор области может быть задан как имя интерфейса (например, "eth0" или "en1") или как целое число, представляющее индекс интерфейса. Если id является именем интерфейса, QtNetwork преобразует его в индекс интерфейса, используя QtNetwork QNetworkInterface::interfaceIndexFromName() перед вызовом функций сетевого стека операционной системы.
См. также scopeId(), QNetworkInterface и QNetworkInterface::interfaceFromName.
[since 5.6] void QHostAddress::swap(QHostAddress &other)
Меняет местами этот адрес хоста с other. Эта операция очень быстрая и никогда не терпит неудачу.
Эта функция была добавлена в Qt 5.6.
quint32 QHostAddress::toIPv4Address(bool *ok = nullptr) const
Возвращает адрес IPv4 в виде числа.
Например, если адрес равен 127.0.0.1, возвращаемое значение равно 2130706433 (т.е. 0x7f000001).
Это значение является корректным, если протокол() равен 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]
} Это значение является корректным, если протокол() равен 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.
bool QHostAddress::operator!=(QHostAddress::SpecialAddress other) const
Возвращает true если этот адрес хоста не такой же, как указанный адрес other; в противном случае возвращает false.
[since 5.8] 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.
Связанные внешние функции
[since 5.0] size_t qHash(const QHostAddress &key, size_t seed = 0)
Возвращает хеш-значение адреса хоста key, используя seed для инициализации вычислений.
Эта функция была добавлена в Qt 5.0.
[since 5.9] bool operator!=(QHostAddress::SpecialAddress lhs, const QHostAddress &rhs)
Возвращает false если специальный адрес lhs совпадает с адресом хоста rhs; в противном случае возвращает true.
Эта функция была добавлена в Qt 5.9.
См. также isEqual().
QDataStream &operator<<(QDataStream &out, const QHostAddress &address)
Записывает адрес хоста address в поток out и возвращает ссылку на поток.
См. также Сериализация типов данных Qt.
bool operator==(QHostAddress::SpecialAddress lhs, const QHostAddress &rhs)
Возвращает true если специальный адрес lhs совпадает с адресом хоста rhs; в противном случае возвращает false.
См. также isEqual().
QDataStream &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-6.0/qhostaddress.html