Spec-Zone.ru › Qt

Класс QAbstractSocket

Класс QAbstractSocket предоставляет базовые функции, общие для всех типов сокетов. Подробнее...

Заголовок: #include <QAbstractSocket>
CMake: find_package(Qt6 COMPONENTS Network REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake: QT += network
Наследует: QIODevice
Наследуется:

QTcpSocket и QUdpSocket

  • Список всех членов, включая унаследованные

Примечание: Все функции в этом классе являются реентерабельными.

Типы публичного доступа

перечисление BindFlag { ShareAddress, DontShareAddress, ReuseAddressHint, DefaultForPlatform }
флаги BindMode
перечисление NetworkLayerProtocol { IPv4Protocol, IPv6Protocol, AnyIPProtocol, UnknownNetworkLayerProtocol }
перечисление PauseMode { PauseNever, PauseOnSslErrors }
флаги PauseModes
перечисление SocketError { ConnectionRefusedError, RemoteHostClosedError, HostNotFoundError, SocketAccessError, SocketResourceError, …, UnknownSocketError }
перечисление SocketOption { LowDelayOption, KeepAliveOption, MulticastTtlOption, MulticastLoopbackOption, TypeOfServiceOption, …, PathMtuSocketOption }
перечисление SocketState { UnconnectedState, HostLookupState, ConnectingState, ConnectedState, BoundState, …, ListeningState }
перечисление SocketType { TcpSocket, UdpSocket, SctpSocket, UnknownSocketType }

Публичные функции

QAbstractSocket(QAbstractSocket::SocketType socketType, QObject *parent)
виртуальный ~QAbstractSocket()
void abort()
виртуальный bool bind(const QHostAddress &address, quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform)
bool bind(QHostAddress::SpecialAddress addr, quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform)
bool bind(quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform)
виртуальный void connectToHost(const QString &hostName, quint16 port, QIODeviceBase::OpenMode openMode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol)
void connectToHost(const QHostAddress &address, quint16 port, QIODeviceBase::OpenMode openMode = ReadWrite)
виртуальный void disconnectFromHost()
QAbstractSocket::SocketError error() const
bool flush()
bool isValid() const
QHostAddress localAddress() const
quint16 localPort() const
QAbstractSocket::PauseModes pauseMode() const
QHostAddress peerAddress() const
QString peerName() const
quint16 peerPort() const
QString protocolTag() const
QNetworkProxy proxy() const
qint64 readBufferSize() const
виртуальный void resume()
void setPauseMode(QAbstractSocket::PauseModes pauseMode)
void setProtocolTag(const QString &tag)
void setProxy(const QNetworkProxy &networkProxy)
виртуальный void setReadBufferSize(qint64 size)
виртуальный bool setSocketDescriptor(qintptr socketDescriptor, QAbstractSocket::SocketState socketState = ConnectedState, QIODeviceBase::OpenMode openMode = ReadWrite)
виртуальный void setSocketOption(QAbstractSocket::SocketOption option, const QVariant &value)
виртуальный qintptr socketDescriptor() const
виртуальный QVariant socketOption(QAbstractSocket::SocketOption option)
QAbstractSocket::SocketType socketType() const
QAbstractSocket::SocketState state() const
виртуальный bool waitForConnected(int msecs = 30000)
виртуальный bool waitForDisconnected(int msecs = 30000)

Реализованные публичные функции

virtual qint64 количествоДоступныхБайтов() const override
virtual qint64 количествоБайтовДляЗаписи() const override
virtual void закрыть() override
virtual bool являетсяПоследовательным() const override
virtual bool подождатьЗаписьБайтов(int msecs = 30000) override
virtual bool подождатьГотовностьКЧтению(int msecs = 30000) override

Сигналы

void подключено()
void отключено()
void возниклаОшибка(QAbstractSocket::SocketError socketError)
void хостНайден()
void требуетсяПроверкаПодлинностиПрокси(const QNetworkProxy &proxy, QAuthenticator *authenticator)
void состояниеИзменено(QAbstractSocket::SocketState socketState)

Защищенные функции

void установитьЛокальныйАдрес(const QHostAddress &address)
void установитьЛокальныйПорт(quint16 port)
void установитьАдресУдаленногоХоста(const QHostAddress &address)
void установитьИмяУдаленногоХоста(const QString &name)
void установитьПортУдаленногоХоста(quint16 port)
void установитьОшибкаСокета(QAbstractSocket::SocketError socketError)
void установитьСостояниеСокета(QAbstractSocket::SocketState state)

Переопределённые защищенные функции

virtual qint64 прочитатьДанные(char *data, qint64 maxSize) override
virtual qint64 прочитатьСтрокуДанных(char *data, qint64 maxlen) override
virtual qint64 пропуститьДанные(qint64 maxSize) override
virtual qint64 записатьДанные(const char *data, qint64 size) override

Подробное описание

QAbstractSocket — базовый класс для QTcpSocket и QUdpSocket и содержит всю общую функциональность этих двух классов. Если вам нужен сокет, у вас есть два варианта:

  • Создайте экземпляр QTcpSocket или QUdpSocket.
  • Создайте дескриптор сокета, создайте экземпляр QAbstractSocket и вызовите setSocketDescriptor() для обертывания сокета.

TCP (Transmission Control Protocol) — надёжный, потоковый, ориентированный на соединение транспортный протокол. UDP (User Datagram Protocol) — ненадежный, ориентированный на датаграммы, бессоединительный протокол. На практике это означает, что TCP лучше подходит для непрерывной передачи данных, а более лёгкий UDP может использоваться, когда надёжность не важна.

API QAbstractSocket объединяет большинство различий между двумя протоколами. Например, хотя UDP бессоединительный, connectToHost() устанавливает виртуальное соединение для UDP-сокетов, позволяя использовать QAbstractSocket более или менее одинаковым образом независимо от базового протокола. Внутренне QAbstractSocket запоминает адрес и порт, переданные в connectToHost(), а функции, такие как read() и write(), используют эти значения.

В любой момент QAbstractSocket имеет состояние (возвращаемое state()). Начальное состояние — UnconnectedState. После вызова connectToHost() сокет сначала переходит в состояние HostLookupState. Если хост найден, QAbstractSocket переходит в состояние ConnectingState и генерирует сигнал hostFound(). Когда соединение установлено, оно переходит в состояние ConnectedState и генерирует сигнал connected(). Если на любом этапе возникает ошибка, генерируется errorOccurred(). Всякий раз, когда состояние меняется, генерируется stateChanged(). Для удобства isValid() возвращает true, если сокет готов для чтения и записи, но обратите внимание, что состояние сокета должно быть ConnectedState перед началом чтения и записи.

Чтение или запись данных осуществляется путём вызова read() или write(), или используйте удобные функции readLine() и readAll(). QAbstractSocket также наследует getChar(), putChar() и ungetChar() от QIODevice, которые работают с отдельными байтами. Сигнал bytesWritten() генерируется при записи данных в сокет. Обратите внимание, что Qt не ограничивает размер буфера записи. Вы можете отслеживать его размер, прослушивая этот сигнал.

Сигнал readyRead() генерируется каждый раз, когда прибывает новый фрагмент данных. количествоДоступныхБайтов() возвращает количество байтов, доступных для чтения. Обычно вы подключаете сигнал readyRead() к слоту и читаете все доступные данные там. Если вы не читаете все данные сразу, оставшиеся данные всё ещё будут доступны позже, а любые новые входящие данные будут добавлены в внутренний буфер чтения QAbstractSocket. Для ограничения размера буфера чтения вызовите setReadBufferSize().

Чтобы закрыть сокет, вызовите disconnectFromHost(). QAbstractSocket переходит в состояние QAbstractSocket::ClosingState. После записи всех ожидающих данных в сокет, QAbstractSocket фактически закрывает сокет, переходит в состояние QAbstractSocket::UnconnectedState и генерирует сигнал disconnected(). Если вы хотите немедленно прервать соединение, удалив все ожидающие данные, вызовите abort() вместо этого. Если удалённый хост закрывает соединение, QAbstractSocket сгенерирует errorOccurred(QAbstractSocket::RemoteHostClosedError), при этом состояние сокета останется ConnectedState, а затем сгенерируется сигнал disconnected().

Порт и адрес подключённого узла получаются путём вызова peerPort() и peerAddress(). peerName() возвращает имя хоста узла, как переданное в connectToHost(). localPort() и localAddress() возвращают порт и адрес локального сокета.

QAbstractSocket предоставляет набор функций, которые приостанавливают вызывающую нить до тех пор, пока не будут сгенерированы определённые сигналы. Эти функции могут быть использованы для реализации блокирующих сокетов:

  • подождатьПодключение() блокирует до тех пор, пока соединение не будет установлено.
  • подождатьГотовностьКЧтению() блокирует до тех пор, пока доступны новые данные для чтения.
  • подождатьЗаписьБайтов() блокирует до тех пор, пока один фрагмент данных не будет записан в сокет.
  • подождатьОтключение() блокирует до тех пор, пока соединение не будет закрыто.

Мы покажем пример:

    int numRead = 0, numReadTotal = 0;
    char buffer[50];

    forever {
        numRead  = socket.read(buffer, 50);

        // do whatever with array

        numReadTotal += numRead;
        if (numRead == 0 && !socket.waitForReadyRead())
            break;
    }

Если waitForReadyRead() возвращает false, соединение было закрыто или произошла ошибка.

Программирование с блокирующим сокетом радикально отличается от программирования с неблокирующим сокетом. Блокирующий сокет не требует цикла событий и обычно приводит к более простому коду. Однако в приложении с графическим интерфейсом блокирующие сокеты следует использовать только в потоках, не связанных с графическим интерфейсом, чтобы избежать зависания интерфейса пользователя. См. примеры fortuneclient и blockingfortuneclient для обзора обоих подходов.

Примечание: Мы не рекомендуем использовать блокирующие функции вместе с сигналами. Следует использовать один из двух вариантов.

QAbstractSocket можно использовать с QTextStream и QDataStream операторами потока (operator<<() и operator>>()). Однако есть одна проблема, о которой следует помнить: необходимо убедиться, что достаточно данных доступно перед попыткой их чтения с помощью operator>>().

См. также QNetworkAccessManager и QTcpServer.

Документация по типам членов

[since 5.0] перечисление QAbstractSocket::BindFlagфлаги QAbstractSocket::BindMode

Это перечисление описывает различные флаги, которые можно передать для изменения поведения QAbstractSocket::bind().

Константа Значение Описание
QAbstractSocket::ShareAddress 0x1 Разрешить другим службам привязываться к тому же адресу и порту. Это полезно, когда несколько процессов делят нагрузку одной службы, прослушивая один и тот же адрес и порт (например, веб-сервер с несколькими предварительно разветвленными слушателями может значительно улучшить время отклика). Однако, поскольку любая служба может повторно привязаться, этот параметр связан с определенными соображениями безопасности. Обратите внимание, что комбинирование этого параметра с ReuseAddressHint позволит вашей службе повторно привязаться к существующему общему адресу. В Unix это эквивалентно параметру сокета SO_REUSEADDR. В Windows это поведение по умолчанию, поэтому этот параметр игнорируется.
QAbstractSocket::DontShareAddress 0x2 Привязать адрес и порт исключительно, чтобы другие службы не могли повторно привязываться. Передав этот параметр в QAbstractSocket::bind(), вы гарантируете, что при успехе ваша служба будет единственной, прослушивающей указанный адрес и порт. Никакие службы не смогут повторно привязаться, даже если они передадут ReuseAddressHint. Этот параметр обеспечивает большую безопасность, чем ShareAddress, но на некоторых операционных системах он требует запуска сервера с правами администратора. В Unix и macOS по умолчанию привязка к адресу и порту не является общей, поэтому этот параметр игнорируется. В Windows этот параметр использует параметр сокета SO_EXCLUSIVEADDRUSE.
QAbstractSocket::ReuseAddressHint 0x4 Предоставляет подсказку QAbstractSocket, что он должен попытаться повторно привязать службу даже если адрес и порт уже привязаны другим сокетом. В Windows и Unix это эквивалентно параметру сокета SO_REUSEADDR.
QAbstractSocket::DefaultForPlatform 0x0 Параметр по умолчанию для текущей платформы. В Unix и macOS он эквивалентен (DontShareAddress + ReuseAddressHint), а в Windows — ShareAddress.

Это перечисление было добавлено или изменено в Qt 5.0.

Тип BindMode является псевдонимом для QFlags<BindFlag>. Он хранит объединение значений BindFlag по оператору ИЛИ.

перечисление QAbstractSocket::NetworkLayerProtocol

Это перечисление описывает значения протокола сетевого уровня, используемые в Qt.

Константа Значение Описание
QAbstractSocket::IPv4Protocol 0 IPv4
QAbstractSocket::IPv6Protocol 1 IPv6
QAbstractSocket::AnyIPProtocol 2 IPv4 или IPv6
QAbstractSocket::UnknownNetworkLayerProtocol -1 Другой, кроме IPv4 и IPv6

См. также QHostAddress::protocol().

[since 5.0] перечисление QAbstractSocket::PauseModeфлаги QAbstractSocket::PauseModes

Это перечисление описывает поведение, когда сокет должен приостановить передачу данных. В настоящее время поддерживается только уведомление QSslSocket::sslErrors().

Константа Значение Описание
QAbstractSocket::PauseNever 0x0 Не приостанавливать передачу данных по сокету. Это значение по умолчанию и соответствует поведению Qt 4.
QAbstractSocket::PauseOnSslErrors 0x1 Приостановить передачу данных по сокету при получении уведомления об ошибке SSL. Т.е. QSslSocket::sslErrors().

Это перечисление было добавлено или изменено в Qt 5.0.

Тип PauseModes является псевдонимом для QFlags<PauseMode>. Он хранит объединение значений PauseMode по оператору ИЛИ.

перечисление QAbstractSocket::SocketError

Это перечисление описывает ошибки сокета, которые могут возникнуть.

Постоянная Значение Описание
QAbstractSocket::ConnectionRefusedError 0 Подключение отклонено удалённым узлом (или истекло время ожидания).
QAbstractSocket::RemoteHostClosedError 1 Удалённый узел закрыл соединение. Обратите внимание, что клиентский сокет (то есть этот сокет) будет закрыт после отправки уведомления о закрытии удалённого узла.
QAbstractSocket::HostNotFoundError 2 Адрес узла не найден.
QAbstractSocket::SocketAccessError 3 Операция с сокетом завершилась неудачей из-за отсутствия необходимых привилегий приложения.
QAbstractSocket::SocketResourceError 4 Локальная система исчерпала ресурсы (например, слишком много сокетов).
QAbstractSocket::SocketTimeoutError 5 Операция с сокетом истекла по времени.
QAbstractSocket::DatagramTooLargeError 6 Размер дейтаграммы превысил системный предел (который может быть, например, 8192 байта).
QAbstractSocket::NetworkError 7 Возникла ошибка в сети (например, сетевой кабель случайно был отключен).
QAbstractSocket::AddressInUseError 8 Указанный адрес для QAbstractSocket::bind() уже используется и был установлен как эксклюзивный.
QAbstractSocket::SocketAddressNotAvailableError 9 Указанный адрес для QAbstractSocket::bind() не принадлежит узлу.
QAbstractSocket::UnsupportedSocketOperationError 10 Запрошенная операция с сокетом не поддерживается локальной операционной системой (например, отсутствует поддержка IPv6).
QAbstractSocket::ProxyAuthenticationRequiredError 12 Сокет использует прокси, и прокси требует аутентификации.
QAbstractSocket::SslHandshakeFailedError 13 Сеанс SSL/TLS завершился неудачей, поэтому соединение было закрыто (используется только в QSslSocket)
QAbstractSocket::UnfinishedSocketOperationError 11 Используется только QAbstractSocketEngine. Последняя попытка операции ещё не завершена (ещё выполняется в фоновом режиме).
QAbstractSocket::ProxyConnectionRefusedError 14 Не удалось связаться с сервером прокси, так как соединение с этим сервером было отклонено
QAbstractSocket::ProxyConnectionClosedError 15 Соединение с сервером прокси было неожиданно закрыто (до того, как было установлено соединение с конечным узлом)
QAbstractSocket::ProxyConnectionTimeoutError 16 Соединение с сервером прокси истекло по времени или сервер прокси перестал отвечать на этапе аутентификации.
QAbstractSocket::ProxyNotFoundError 17 Адрес прокси, заданный с помощью setProxy() (или прокси приложения), не найден.
QAbstractSocket::ProxyProtocolError 18 Не удалось согласовать соединение с сервером прокси, так как ответ сервера прокси не был понят.
QAbstractSocket::OperationError 19 Была попытка операции, в то время как сокет находился в состоянии, которое не позволяло её выполнить.
QAbstractSocket::SslInternalError 20 Библиотека SSL сообщила об внутренней ошибке. Возможно, это результат неправильной установки или конфигурации библиотеки.
QAbstractSocket::SslInvalidUserDataError 21 Были предоставлены неверные данные (сертификат, ключ, шифр и т. д.), и их использование привело к ошибке в библиотеке SSL.
QAbstractSocket::TemporaryError 22 Возникла временная ошибка (например, операция заблокирована, а сокет неблокирующий).
QAbstractSocket::UnknownSocketError -1 Произошла неопределённая ошибка.

См. также QAbstractSocket::error() и QAbstractSocket::errorOccurred().

перечисление QAbstractSocket::SocketOption

Это перечисление представляет параметры, которые могут быть установлены для сокета. При необходимости они могут быть установлены после получения сигнала connected() от сокета или после получения нового сокета от QTcpServer.

Постоянная Значение Описание
QAbstractSocket::LowDelayOption 0 Попытаться оптимизировать сокет для низкой задержки. Для QTcpSocket это установит параметр TCP_NODELAY и отключит алгоритм Нагле. Установите в 1 для включения.
QAbstractSocket::KeepAliveOption 1 Установите в 1, чтобы включить параметр SO_KEEPALIVE сокета.
QAbstractSocket::MulticastTtlOption 2 Установите это значение в целое число, чтобы установить параметр сокета IP_MULTICAST_TTL (TTL для дейтаграмм мультикаста).
QAbstractSocket::MulticastLoopbackOption 3 Установите в 1, чтобы включить параметр сокета IP_MULTICAST_LOOP (обратная связь мультикаста).
QAbstractSocket::TypeOfServiceOption 4 Этот параметр не поддерживается в Windows. Соответствует параметру сокета IP_TOS. Возможные значения см. в таблице ниже.
QAbstractSocket::SendBufferSizeSocketOption 5 Устанавливает размер буфера отправки сокета в байтах на уровне ОС. Соответствует параметру сокета SO_SNDBUF. Этот параметр не влияет на буферы QIODevice или QAbstractSocket. Это значение перечисления было добавлено в Qt 5.3.
QAbstractSocket::ReceiveBufferSizeSocketOption 6 Устанавливает размер буфера получения сокета в байтах на уровне ОС. Соответствует параметру сокета SO_RCVBUF. Этот параметр не влияет на буферы QIODevice или QAbstractSocket (см. setReadBufferSize()). Это значение перечисления было добавлено в Qt 5.3.
QAbstractSocket::PathMtuSocketOption 7 Получает значение PMTU (Path Maximum Transmission Unit) в настоящее время известное IP-стеком, если таковое имеется. Некоторые IP-стеки также позволяют устанавливать MTU для передачи. Это значение перечисления было добавлено в Qt 5.11.

Возможные значения для TypeOfServiceOption:

Значение Описание
224 Управление сетью
192 Управление межсетевым обменом
160 CRITIC/ECP
128 Переопределение флэш-памяти
96 Флэш-память
64 Немедленно
32 Приоритет
0 Обычная операция

См. также QAbstractSocket::setSocketOption() и QAbstractSocket::socketOption().

перечисление QAbstractSocket::SocketState

Это перечисление описывает различные состояния, в которых может находиться сокет.

Постоянная Значение Описание
QAbstractSocket::UnconnectedState 0 Сокет не подключён.
QAbstractSocket::HostLookupState 1 Сокет выполняет поиск имени узла.
QAbstractSocket::ConnectingState 2 Сокет начал установку соединения.
QAbstractSocket::ConnectedState 3 Соединение установлено.
QAbstractSocket::BoundState 4 Сокет привязан к адресу и порту.
QAbstractSocket::ClosingState 6 Сокет закрывается (данные могут ещё ожидать записи).
QAbstractSocket::ListeningState 5 Для внутреннего использования только.

См. также QAbstractSocket::state().

enum QAbstractSocket::SocketType

Этот перечисление описывает протокол транспортного уровня.

Константа Значение Описание
QAbstractSocket::TcpSocket 0 TCP
QAbstractSocket::UdpSocket 1 UDP
QAbstractSocket::SctpSocket 2 SCTP
QAbstractSocket::UnknownSocketType -1 Другой, кроме TCP, UDP и SCTP

См. также QAbstractSocket::socketType().

Документация по функциям-членам

QAbstractSocket::QAbstractSocket(QAbstractSocket::SocketType socketType, QObject *parent)

Создаёт новый абстрактный сокет типа socketType. Аргумент parent передаётся в конструктор QObject.

См. также socketType(), QTcpSocket и QUdpSocket.

[signal] void QAbstractSocket::connected()

Этот сигнал генерируется после вызова connectToHost() и успешного установления соединения.

Примечание: На некоторых операционных системах сигнал connected() может быть сгенерирован непосредственно из вызова connectToHost() для соединений с локальным хостом.

См. также connectToHost() и disconnected().

[signal] void QAbstractSocket::disconnected()

Этот сигнал генерируется, когда сокет отключён.

Предупреждение: Если вам нужно удалить sender() этого сигнала в подключённом к нему слоте, используйте функцию deleteLater().

См. также connectToHost(), disconnectFromHost() и abort().

[signal, since 5.15] void QAbstractSocket::errorOccurred(QAbstractSocket::SocketError socketError)

Этот сигнал генерируется после возникновения ошибки. Параметр socketError описывает тип возникшей ошибки.

При генерации этого сигнала сокет может быть не готов к попытке повторного подключения. В таком случае попытки повторного подключения следует выполнять из цикла обработки событий. Например, используйте QTimer::singleShot() с 0 в качестве таймаута.

QAbstractSocket::SocketError — не зарегистрированный метатип, поэтому для очереди соединений вам нужно зарегистрировать его с помощью Q_DECLARE_METATYPE() и qRegisterMetaType().

Эта функция была добавлена в Qt 5.15.

См. также error(), errorString() и Создание пользовательских типов Qt.

[signal] void QAbstractSocket::hostFound()

Этот сигнал генерируется после вызова connectToHost() и успешного поиска хоста.

Примечание: Начиная с Qt 4.6.3, QAbstractSocket может генерировать hostFound() непосредственно из вызова connectToHost(), так как результат DNS запроса может быть кэширован.

См. также connected().

[signal] void QAbstractSocket::proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator)

Этот сигнал может быть сгенерирован при использовании proxy, требующей аутентификации. Объект authenticator затем может быть заполнен необходимыми данными для аутентификации и продолжения соединения.

Примечание: Невозможно использовать QueuedConnection для подключения к этому сигналу, так как подключение будет неудачным, если объект authenticator не заполнен новой информацией к моменту возврата сигнала.

См. также QAuthenticator и QNetworkProxy.

[signal] void QAbstractSocket::stateChanged(QAbstractSocket::SocketState socketState)

Этот сигнал генерируется всякий раз, когда состояние QAbstractSocket изменяется. Параметр socketState — новое состояние.

QAbstractSocket::SocketState — не зарегистрированный метатип, поэтому для очереди соединений вам нужно зарегистрировать его с помощью Q_DECLARE_METATYPE() и qRegisterMetaType().

См. также state() и Создание пользовательских типов Qt.

[virtual] QAbstractSocket::~QAbstractSocket()

Удаляет сокет.

void QAbstractSocket::abort()

Прерывает текущее соединение и сбрасывает сокет. В отличие от disconnectFromHost(), эта функция немедленно закрывает сокет, отбрасывая любые ожидающие данные в буфере записи.

См. также disconnectFromHost() и close().

[virtual, since 5.0] bool QAbstractSocket::bind(const QHostAddress &address, quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform)

Привязывает сокет к address на порту port, используя режим mode BindMode.

Для UDP-сокетов после привязки сигнал QUdpSocket::readyRead() генерируется всякий раз, когда на указанный адрес и порт приходит UDP-датаграмма. Таким образом, эта функция полезна для написания UDP-серверов.

Для TCP-сокетов эта функция может использоваться для указания интерфейса, который следует использовать для исходящего соединения, что полезно в случае нескольких сетевых интерфейсов.

По умолчанию сокет привязывается с помощью режима BindMode DefaultForPlatform. Если порт не указан, выбирается случайный порт.

При успехе функция возвращает true и сокет переходит в состояние BoundState; в противном случае она возвращает false.

Эта функция была добавлена в Qt 5.0.

[since 6.2] bool QAbstractSocket::bind(QHostAddress::SpecialAddress addr, quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform)

Это перегруженная функция.

Привязывает сокет к специальному адресу addr на порту port, используя режим BindMode mode.

По умолчанию сокет привязывается с помощью режима BindMode DefaultForPlatform. Если порт не указан, выбирается случайный порт.

Эта функция была добавлена в Qt 6.2.

[since 5.0] bool QAbstractSocket::bind(quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform)

Это перегруженная функция.

Привязывает сокет к QHostAddress:Any на порту port, используя режим BindMode mode.

По умолчанию сокет привязывается с помощью режима BindMode DefaultForPlatform. Если порт не указан, выбирается случайный порт.

Эта функция была добавлена в Qt 5.0.

[override virtual] qint64 QAbstractSocket::bytesAvailable() const

Переопределяет: QIODevice::bytesAvailable() const.

Возвращает количество входящих байтов, ожидающих чтения.

См. также bytesToWrite() и read().

[override virtual] qint64 QAbstractSocket::bytesToWrite() const

Переопределяет: QIODevice::bytesToWrite() const.

Возвращает количество байтов, ожидающих записи. Байты записываются, когда управление возвращается в цикл обработки событий или когда вызывается flush().

См. также bytesAvailable() и flush().

[override virtual] void QAbstractSocket::close()

Переопределяет: QIODevice::close().

Закрывает устройство ввода-вывода для сокета и вызывает disconnectFromHost() для закрытия соединения сокета.

END_OF_DOCUMENT_MARKER

См. QIODevice::close() для описания действий, которые происходят при закрытии устройства ввода-вывода.

См. также abort().

[virtual] void QAbstractSocket::connectToHost(const QString &hostName, quint16 port, QIODeviceBase::OpenMode openMode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol)

Попытка установить соединение с hostName на заданном port. Параметр protocol позволяет указать сетевой протокол (например, IPv4 или IPv6).

Сокет открывается в заданном openMode и сначала переходит в состояние HostLookupState, затем выполняется поиск имени хоста hostName. Если поиск успешен, испускается сигнал hostFound(), и QAbstractSocket переходит в состояние ConnectingState. Затем выполняется попытка соединения с адресом или адресами, возвращенными результатом поиска. Наконец, если соединение установлено, QAbstractSocket переходит в состояние ConnectedState и испускает сигнал connected().

В любой момент сокет может испустить сигнал errorOccurred(), чтобы сообщить об ошибке.

hostName может быть IP-адресом в строковом формате (например, "43.195.83.32"), или именем хоста (например, "example.com"). QAbstractSocket выполнит поиск только при необходимости. port указан в родном порядке байтов.

См. также state(), peerName(), peerAddress(), peerPort() и waitForConnected().

void QAbstractSocket::connectToHost(const QHostAddress &address, quint16 port, QIODeviceBase::OpenMode openMode = ReadWrite)

Это перегруженный метод.

Попытка установить соединение с address на порту port.

[virtual] void QAbstractSocket::disconnectFromHost()

Попытка закрыть сокет. Если есть ожидающие записи данные, QAbstractSocket перейдет в состояние ClosingState и подождет, пока все данные не будут записаны. В конечном итоге, он перейдет в состояние UnconnectedState и испустит сигнал disconnected().

См. также connectToHost().

QAbstractSocket::SocketError QAbstractSocket::error() const

Возвращает тип последней произошедшей ошибки.

См. также state() и errorString().

bool QAbstractSocket::flush()

Этот метод записывает как можно больше данных из внутреннего буфера записи в базовый сетевой сокет, не блокируясь. Если какие-либо данные были записаны, этот метод возвращает true; в противном случае возвращается false.

Вызовите этот метод, если вам нужно, чтобы QAbstractSocket начал отправлять буферизованные данные немедленно. Количество успешно записанных байтов зависит от операционной системы. В большинстве случаев вызывать этот метод не нужно, потому что QAbstractSocket начнёт отправлять данные автоматически, когда управление вернется в цикл событий. В отсутствии цикла событий используйте waitForBytesWritten() вместо этого.

См. также write() и waitForBytesWritten().

[override virtual] bool QAbstractSocket::isSequential() const

Переопределяет: QIODevice::isSequential() const.

bool QAbstractSocket::isValid() const

Возвращает true если сокет валиден и готов к использованию; в противном случае возвращает false.

Примечание: Состояние сокета должно быть ConnectedState, прежде чем можно будет читать и писать.

См. также state().

QHostAddress QAbstractSocket::localAddress() const

Возвращает адрес хоста локального сокета, если доступен; в противном случае возвращает QHostAddress::Null.

Обычно это основной IP-адрес хоста, но может быть QHostAddress::LocalHost (127.0.0.1) для соединений с локальным хостом.

См. также localPort(), peerAddress() и setLocalAddress().

quint16 QAbstractSocket::localPort() const

Возвращает номер порта хоста локального сокета (в родном порядке байтов), если доступен; в противном случае возвращает 0.

См. также localAddress(), peerPort() и setLocalPort().

[since 5.0] QAbstractSocket::PauseModes QAbstractSocket::pauseMode() const

Возвращает режим паузы этого сокета.

Этот метод был введен в Qt 5.0.

См. также setPauseMode() и resume().

QHostAddress QAbstractSocket::peerAddress() const

Возвращает адрес подключенного узла, если сокет находится в состоянии ConnectedState; в противном случае возвращает QHostAddress::Null.

См. также peerName(), peerPort(), localAddress() и setPeerAddress().

QString QAbstractSocket::peerName() const

Возвращает имя узла, указанное методом connectToHost, или пустую строку, если connectToHost() не был вызван.

См. также peerAddress(), peerPort() и setPeerName().

quint16 QAbstractSocket::peerPort() const

Возвращает порт подключенного узла, если сокет находится в состоянии ConnectedState; в противном случае возвращает 0.

См. также peerAddress(), localPort() и setPeerPort().

[since 5.13] QString QAbstractSocket::protocolTag() const

Возвращает тег протокола для данного сокета. Если тег протокола установлен, он передаётся в QNetworkProxyQuery при его внутреннем создании, чтобы указать используемый тег протокола.

Этот метод был введен в Qt 5.13.

См. также setProtocolTag() и QNetworkProxyQuery.

QNetworkProxy QAbstractSocket::proxy() const

Возвращает сетевой прокси для данного сокета. По умолчанию используется QNetworkProxy::DefaultProxy, что означает, что этот сокет запросит настройки прокси по умолчанию для приложения.

См. также setProxy(), QNetworkProxy и QNetworkProxyFactory.

qint64 QAbstractSocket::readBufferSize() const

Возвращает размер внутреннего буфера чтения. Это ограничивает количество данных, которые клиент может принять, прежде чем вы вызовете read() или readAll().

Размер буфера чтения 0 (по умолчанию) означает, что буфер не имеет ограничений по размеру, гарантируя, что данные не потеряются.

См. также setReadBufferSize() и read().

[override virtual protected] qint64 QAbstractSocket::readData(char *data, qint64 maxSize)

Переопределяет: QIODevice::readData(char *data, qint64 maxSize).

[override virtual protected] qint64 QAbstractSocket::readLineData(char *data, qint64 maxlen)

Переопределяет: QIODevice::readLineData(char *data, qint64 maxSize).

[virtual, since 5.0] void QAbstractSocket::resume()

Продолжает передачу данных по сокету. Этот метод следует использовать только после того, как сокет был приостановлен по уведомлениям и было получено уведомление. В настоящее время поддерживается только уведомление QSslSocket::sslErrors(). Вызов этого метода, если сокет не приостановлен, приводит к неопределённому поведению.

Эта функция была введена в Qt 5.0.

См. также pauseMode() и setPauseMode().

[protected] void QAbstractSocket::setLocalAddress(const QHostAddress &address)

Устанавливает адрес на локальной стороне соединения на address.

Вы можете вызвать эту функцию в подклассе QAbstractSocket, чтобы изменить возвращаемое значение функции localAddress() после установления соединения. Эта функция обычно используется прокси-соединениями для настройки виртуальных соединений.

Обратите внимание, что эта функция не привязывает локальный адрес сокета до подключения (например, QAbstractSocket::bind()).

См. также localAddress(), setLocalPort() и setPeerAddress().

[protected] void QAbstractSocket::setLocalPort(quint16 port)

Устанавливает порт на локальной стороне соединения на port.

Вы можете вызвать эту функцию в подклассе QAbstractSocket, чтобы изменить возвращаемое значение функции localPort() после установления соединения. Эта функция обычно используется прокси-соединениями для настройки виртуальных соединений.

Обратите внимание, что эта функция не привязывает локальный порт сокета до подключения (например, QAbstractSocket::bind()).

См. также localPort(), localAddress(), setLocalAddress() и setPeerPort().

[since 5.0] void QAbstractSocket::setPauseMode(QAbstractSocket::PauseModes pauseMode)

Управляет приостановкой при получении уведомления. Параметр pauseMode указывает условия, при которых сокет должен быть приостановлен. В настоящее время поддерживается только уведомление QSslSocket::sslErrors(). Если установлено значение PauseOnSslErrors, передача данных по сокету будет приостановлена и должна быть снова включена явно, вызвав resume(). По умолчанию этот параметр установлен на PauseNever. Этот параметр должен быть установлен до подключения к серверу, в противном случае это приведёт к неопределённому поведению.

Эта функция была введена в Qt 5.0.

См. также pauseMode() и resume().

[protected] void QAbstractSocket::setPeerAddress(const QHostAddress &address)

Устанавливает адрес удалённой стороны соединения на address.

Вы можете вызвать эту функцию в подклассе QAbstractSocket, чтобы изменить возвращаемое значение функции peerAddress() после установления соединения. Эта функция обычно используется прокси-соединениями для настройки виртуальных соединений.

См. также peerAddress(), setPeerPort() и setLocalAddress().

[protected] void QAbstractSocket::setPeerName(const QString &name)

Устанавливает имя хоста удалённого участника на name.

Вы можете вызвать эту функцию в подклассе QAbstractSocket, чтобы изменить возвращаемое значение функции peerName() после установления соединения. Эта функция обычно используется прокси-соединениями для настройки виртуальных соединений.

См. также peerName().

[protected] void QAbstractSocket::setPeerPort(quint16 port)

Устанавливает порт удалённой стороны соединения на port.

Вы можете вызвать эту функцию в подклассе QAbstractSocket, чтобы изменить возвращаемое значение функции peerPort() после установления соединения. Эта функция обычно используется прокси-соединениями для настройки виртуальных соединений.

См. также peerPort(), setPeerAddress() и setLocalPort().

[since 5.13] void QAbstractSocket::setProtocolTag(const QString &tag)

Устанавливает тег протокола для этого сокета на tag.

Эта функция была введена в Qt 5.13.

См. также protocolTag().

void QAbstractSocket::setProxy(const QNetworkProxy &networkProxy)

Устанавливает явную сеть прокси для этого сокета на networkProxy.

Чтобы отключить использование прокси для этого сокета, используйте тип прокси QNetworkProxy::NoProxy:

socket->setProxy(QNetworkProxy::NoProxy);

Значение по умолчанию для прокси — QNetworkProxy::DefaultProxy, что означает, что сокет будет использовать параметры приложения: если прокси установлен с помощью QNetworkProxy::setApplicationProxy, он будет использоваться; в противном случае, если фабрика установлена с помощью QNetworkProxyFactory::setApplicationProxyFactory, она запросит эту фабрику с типом QNetworkProxyQuery::TcpSocket.

См. также proxy(), QNetworkProxy и QNetworkProxyFactory::queryProxy().

[virtual] void QAbstractSocket::setReadBufferSize(qint64 size)

Устанавливает размер внутреннего буфера чтения QAbstractSocket на size байт.

Если размер буфера ограничен определённым размером, QAbstractSocket не будет буферизировать больше данных, чем этот размер. В исключительных случаях размер буфера 0 означает, что буфер чтения не ограничен и все входящие данные буферизуются. Это значение по умолчанию.

Этот параметр полезен, если вы считываете данные только в определённые моменты времени (например, в приложении потоковой передачи в реальном времени) или если вы хотите защитить сокет от получения слишком большого объёма данных, что в конечном итоге может привести к недостатку памяти в приложении.

Только QTcpSocket использует внутренний буфер QAbstractSocket; QUdpSocket вообще не использует буферизацию, а полагается на неявную буферизацию, предоставляемую операционной системой. Из-за этого вызов этой функции для QUdpSocket не имеет эффекта.

См. также readBufferSize() и read().

[virtual] bool QAbstractSocket::setSocketDescriptor(qintptr socketDescriptor, QAbstractSocket::SocketState socketState = ConnectedState, QIODeviceBase::OpenMode openMode = ReadWrite)

Инициализирует QAbstractSocket с дескриптором нативного сокета socketDescriptor. Возвращает true если socketDescriptor принят как действительный дескриптор сокета; в противном случае возвращает false. Сокет открывается в режиме, указанном параметром openMode, и переходит в состояние сокета, указанное параметром socketState. Буферы чтения и записи очищаются, отбрасывая любые ожидающие данные.

Примечание: Невозможно инициализировать два абстрактных сокета с тем же дескриптором нативного сокета.

См. также socketDescriptor().

[protected] void QAbstractSocket::setSocketError(QAbstractSocket::SocketError socketError)

Устанавливает тип ошибки, которая произошла в последнюю очередь, на socketError.

См. также setSocketState() и setErrorString().

[virtual] void QAbstractSocket::setSocketOption(QAbstractSocket::SocketOption option, const QVariant &value)

Устанавливает указанный параметр option на значение, описанное параметром value.

Примечание: В Windows Runtime QAbstractSocket::KeepAliveOption должен быть установлен до подключения к сокету.

См. также socketOption().

[protected] void QAbstractSocket::setSocketState(QAbstractSocket::SocketState state)

Устанавливает состояние сокета на state.

См. также state().

[override virtual protected] qint64 QAbstractSocket::skipData(qint64 maxSize)

Реализует: QIODevice::skipData(qint64 maxSize).

[virtual] qintptr QAbstractSocket::socketDescriptor() const

Возвращает дескриптор сокета приложения QAbstractSocket, если он доступен; в противном случае возвращает -1.

Если сокет использует QNetworkProxy, возвращаемый дескриптор может быть неработоспособен для функций сокетов приложения.

Дескриптор сокета недоступен, когда QAbstractSocket находится в состоянии UnconnectedState.

См. также setSocketDescriptor().

[virtual] QVariant QAbstractSocket::socketOption(QAbstractSocket::SocketOption option)

Возвращает значение параметра option.

См. также setSocketOption().

QAbstractSocket::SocketType QAbstractSocket::socketType() const

Возвращает тип сокета (TCP, UDP или другой).

См. также QTcpSocket и QUdpSocket.

QAbstractSocket::SocketState QAbstractSocket::state() const

Возвращает состояние сокета.

См. также error().

[override virtual] bool QAbstractSocket::waitForBytesWritten(int msecs = 30000)

Реализует: QIODevice::waitForBytesWritten(int msecs).

Эта функция блокируется, пока не будет записан хотя бы один байт в сокет и не будет выпущен сигнал bytesWritten(). Функция завершится по истечении msecs миллисекунд; значение по умолчанию — 30000 миллисекунд.

Функция возвращает true если сигнал bytesWritten() был выпущен; в противном случае она возвращает false (если произошла ошибка или операция завершилась по таймауту).

Примечание: Эта функция может случайным образом завершаться на Windows. Рассмотрите использование цикла обработки событий и сигнала bytesWritten(), если ваше приложение будет работать на Windows.

См. также waitForReadyRead().

[virtual] bool QAbstractSocket::waitForConnected(int msecs = 30000)

Ожидает подключения сокета в течение msecs миллисекунд. Если подключение установлено, эта функция возвращает true; в противном случае — false. В случае возврата false, можно вызвать error() для определения причины ошибки.

В следующем примере ожидается подключение в течение одного секунды:

socket->connectToHost("imap", 143);
if (socket->waitForConnected(1000))
    qDebug("Connected!");

Если msecs равно -1, эта функция не будет ждать по таймауту.

Примечание: Эта функция может немного дольше ждать, чем msecs, в зависимости от времени выполнения поиска хоста.

Примечание: Многократные вызовы этой функции не накапливают время ожидания. Если функция завершается по таймауту, процесс подключения прервётся.

Примечание: Эта функция может случайным образом завершаться на Windows. Рассмотрите использование цикла обработки событий и сигнала connected(), если ваше приложение будет работать на Windows.

См. также connectToHost() и connected().

[virtual] bool QAbstractSocket::waitForDisconnected(int msecs = 30000)

Ожидает разъединения сокета в течение msecs миллисекунд. Если разъединение произошло успешно, функция возвращает true; в противном случае — false (если операция завершилась по таймауту, произошла ошибка или этот QAbstractSocket уже разъединён). В случае возврата false, можно вызвать error() для определения причины ошибки.

В следующем примере ожидается закрытие соединения в течение одной секунды:

socket->disconnectFromHost();
if (socket->state() == QAbstractSocket::UnconnectedState
    || socket->waitForDisconnected(1000)) {
        qDebug("Disconnected!");
}

Если msecs равно -1, эта функция не будет ждать по таймауту.

Примечание: Эта функция может случайным образом завершаться на Windows. Рассмотрите использование цикла обработки событий и сигнала disconnected(), если ваше приложение будет работать на Windows.

См. также disconnectFromHost() и close().

[override virtual] bool QAbstractSocket::waitForReadyRead(int msecs = 30000)

Реализует: QIODevice::waitForReadyRead(int msecs).

Эта функция блокируется, пока новые данные не станут доступны для чтения и не будет выпущен сигнал readyRead(). Функция завершится по истечении msecs миллисекунд; значение по умолчанию — 30000 миллисекунд.

Функция возвращает true если сигнал readyRead() был выпущен и новые данные доступны для чтения; в противном случае она возвращает false (если произошла ошибка или операция завершилась по таймауту).

Примечание: Эта функция может случайным образом завершаться на Windows. Рассмотрите использование цикла обработки событий и сигнала readyRead(), если ваше приложение будет работать на Windows.

См. также waitForBytesWritten().

[override virtual protected] qint64 QAbstractSocket::writeData(const char *data, qint64 size)

Реализует: QIODevice::writeData(const char *data, qint64 maxSize).

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qabstractsocket.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API