Spec-Zone.ru › Qt 5.11

Класс QAbstractSocket

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

Заголовок: #include <QAbstractSocket>
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, ..., UnknownSocketError }
перечисление SocketOption { LowDelayOption, KeepAliveOption, MulticastTtlOption, MulticastLoopbackOption, ..., PathMtuSocketOption }
перечисление SocketState { UnconnectedState, HostLookupState, ConnectingState, ConnectedState, ..., 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(quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform)
виртуальный void connectToHost(const QString &hostName, quint16 port, QIODevice::OpenMode openMode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol)
виртуальный void connectToHost(const QHostAddress &address, quint16 port, QIODevice::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
QNetworkProxy proxy() const
qint64 readBufferSize() const
виртуальный void resume()
void setPauseMode(QAbstractSocket::PauseModes pauseMode)
void setProxy(const QNetworkProxy &networkProxy)
виртуальный void setReadBufferSize(qint64 size)
виртуальный bool setSocketDescriptor(qintptr socketDescriptor, QAbstractSocket::SocketState socketState = ConnectedState, QIODevice::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)

Переопределённые публичные функции

виртуальный bool atEnd() const override
виртуальный qint64 bytesAvailable() const override
виртуальный qint64 bytesToWrite() const override
виртуальный bool canReadLine() const override
виртуальный void close() override
виртуальный bool isSequential() const override
виртуальный bool waitForBytesWritten(int msecs = 30000) override
виртуальный bool waitForReadyRead(int msecs = 30000) override
  • 47 общедоступных функций, унаследованных от QIODevice
  • 34 общедоступных функций, унаследованных от QObject

Сигналы

void connected()
void disconnected()
void error(QAbstractSocket::SocketError socketError)
void hostFound()
void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator)
void stateChanged(QAbstractSocket::SocketState socketState)
  • 6 сигналов, унаследованных от QIODevice
  • 2 сигналов, унаследованных от QObject

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

void setLocalAddress(const QHostAddress &address)
void setLocalPort(quint16 port)
void setPeerAddress(const QHostAddress &address)
void setPeerName(const QString &name)
void setPeerPort(quint16 port)
void setSocketError(QAbstractSocket::SocketError socketError)
void setSocketState(QAbstractSocket::SocketState state)

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

virtual qint64 readData(char *data, qint64 maxSize) override
virtual qint64 readLineData(char *data, qint64 maxlen) override
virtual qint64 writeData(const char *data, qint64 size) override
  • 5 защищённых функций, унаследованных от QIODevice
  • 9 защищённых функций, унаследованных от QObject

Дополнительные унаследованные члены

  • 1 свойство, унаследованное от QObject
  • 1 общедоступный слот, унаследованный от QObject
  • 1 общедоступная переменная, унаследованная от QIODevice
  • 1 общедоступная переменная, унаследованная от QObject
  • 2 статические общедоступные члены, унаследованные от QIODevice
  • 10 статических общедоступных членов, унаследованных от QObject
  • 2 защищённые переменные, унаследованные от QObject

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

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

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(). Если на любой стадии возникает ошибка, излучается error(). Всякий раз, когда состояние меняется, излучается stateChanged(). Для удобства, isValid() возвращает true, если сокет готов к чтению и записи, но обратите внимание, что состояние сокета должно быть ConnectedState перед чтением и записью.

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

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

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

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

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

  • waitForConnected() блокирует, пока соединение не будет установлено.
  • waitForReadyRead() блокирует, пока новые данные не будут доступны для чтения.
  • waitForBytesWritten() блокирует, пока один пакет данных не будет записан в сокет.
  • waitForDisconnected() блокирует, пока соединение не будет закрыто.

Мы показываем пример:

    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, соединение было закрыто или произошла ошибка.

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

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

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

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

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

enum QAbstractSocket::BindFlagflags 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.

enum QAbstractSocket::NetworkLayerProtocol

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

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

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

enum QAbstractSocket::PauseModeflags QAbstractSocket::PauseModes

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

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

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

Тип PauseModes — это псевдоним для QFlags<PauseMode>. Он хранит логическое ИЛИ комбинацию значений PauseMode.

enum 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::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 Получает значение Path Maximum Transmission Unit (PMTU), известное стеку IP, если оно есть. Некоторые стеки IP также позволяют установить MTU для передачи. Это значение перечисления было добавлено в Qt 5.11.

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

Значение Описание
224 Управление сетью
192 Управление сетью
160 CRITIC/ECP
128 Переопределение Flash
96 Flash
64 Немедленно
32 Приоритет
0 Обычное

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

См. также 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.

[virtual] QAbstractSocket::~QAbstractSocket()

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

void QAbstractSocket::abort()

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

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

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

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

Возвращает true , если больше нет доступных данных для чтения; в противном случае возвращает false.

Эта функция наиболее часто используется при чтении данных из сокета в цикле. Например:

 // This slot is connected to QAbstractSocket::readyRead()
 void SocketClass::readyReadSlot()
 {
     while (!socket.atEnd()) {
         QByteArray data = socket.read(100);
         ....
     }
 }

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

bool QAbstractSocket::bind(const QHostAddress &address, quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform)

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

Привязывает этот сокет к адресу address и порту port.

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

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

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

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

Эта функция была добавлена в Qt 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().

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

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

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

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

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

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

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

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

Возвращает true , если строка данных может быть прочитана из сокета; в противном случае возвращает false.

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

[override virtual] void QAbstractSocket::close()

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

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

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

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

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

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

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

В любой момент сокет может генерировать сигнал error() для указания возникшей ошибки.

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

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

[virtual] void QAbstractSocket::connectToHost(const QHostAddress &address, quint16 port, QIODevice::OpenMode openMode = ReadWrite)

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

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

[signal] void QAbstractSocket::connected()

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

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

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

[virtual] void QAbstractSocket::disconnectFromHost()

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

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

[signal] void QAbstractSocket::disconnected()

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

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

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

QAbstractSocket::SocketError QAbstractSocket::error() const

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

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

[signal] void QAbstractSocket::error(QAbstractSocket::SocketError socketError)

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

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

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

Примечание: Сигнал error перегружен в этом классе. Для подключения к этому сигналу с использованием синтаксиса указателя на функцию Qt предоставляет удобную вспомогательную функцию для получения указателя на функцию, как показано в этом примере:

connect(abstractSocket, QOverload<QAbstractSocket::SocketError>::of(&QAbstractSocket::error),
    [=](QAbstractSocket::SocketError socketError){ /* ... */ });

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

bool QAbstractSocket::flush()

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

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

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

[signal] void QAbstractSocket::hostFound()

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

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

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

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

Переопределено из QIODevice::isSequential().

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().

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(), или пустую строку QString, если connectToHost() не был вызван.

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

quint16 QAbstractSocket::peerPort() const

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

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

QNetworkProxy QAbstractSocket::proxy() const

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

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

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

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

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

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

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

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

qint64 QAbstractSocket::readBufferSize() const

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

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

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

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

Переопределено из QIODevice::readData().

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

Переопределено из QIODevice::readLineData().

[virtual] void QAbstractSocket::resume()

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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() после установления соединения. Эта функция обычно используется для прокси-соединений для настройки виртуальных соединений.

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

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

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

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

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

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

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

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

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

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

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

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

void QAbstractSocket::setProxy(const QNetworkProxy &networkProxy)

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

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

socket->setProxy(QNetworkProxy::NoProxy);

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

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

См. также 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, QIODevice::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 необходимо установить до подключения к сокету.

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

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

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

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

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

[virtual] qintptr QAbstractSocket::socketDescriptor() const

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

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

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

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

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

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

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

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

QAbstractSocket::SocketType QAbstractSocket::socketType() const

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

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

QAbstractSocket::SocketState QAbstractSocket::state() const

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

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

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

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

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

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

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

Переопределено из QIODevice::waitForBytesWritten().

Эта функция блокируется до тех пор, пока не будет записан как минимум один байт в сокет, и не будет испущен сигнал 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. В случае возврата 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().

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

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

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

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

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

Переопределено из QIODevice::writeData().

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

Spec-Zone.ru

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