Класс 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 |
| int | 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 sect. 2.5.5.2), при сравнении. Следовательно, QHostAddress("::ffff:192.168.1.1") будет сравниваться с QHostAddress("192.168.1.1"). |
QHostAddress::ConvertV4CompatToIPv4 |
2 |
Преобразовывать IPv6-адреса, совместимые с IPv4 (RFC 4291 sect. 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 с помощью операции OR.
См. также isEqual().
перечисление 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.
[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()
Устанавливает адрес хоста в значение null и устанавливает протокол в 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().
END_OF_DOCUMENT_MARKERbool 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-address>/n, где n — любое значение от 0 до 128
Для IP версии 4 эта функция также принимает отсутствующие хвостовые компоненты (т.е. менее 4 октетов, например, "192.168.1"), с или без точки. Если маска сети также отсутствует в этом случае, она устанавливается в количество фактически переданных октетов (в приведённом выше примере это будет 24 для 3 октетов).
См. также isInSubnet().
int 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 преобразует его в индекс интерфейса, используя 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).
Это значение корректно, если 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, то адрес возвращается как IPv4-отображенный IPv6 адрес. (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.2/qhostaddress.html