Spec-Zone.ru › Qt 5.15

Класс 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, 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(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
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, 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

Сигналы

void connected()
void disconnected()
void errorOccurred(QAbstractSocket::SocketError socketError)
void hostFound()
void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator)
void stateChanged(QAbstractSocket::SocketState socketState)

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

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)

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

виртуальный qint64 readData(char *data, qint64 maxSize) override
виртуальный qint64 readLineData(char *data, qint64 maxlen) override
виртуальный qint64 writeData(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() излучается каждый раз, когда новый фрагмент данных прибывает. bytesAvailable() затем возвращает количество байтов, доступных для чтения. Как правило, вы подключаете сигнал 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 предоставляет набор функций, которые приостанавливают поток вызова до тех пор, пока не будут излучены определенные сигналы. Эти функции могут использоваться для реализации блокирующих сокетов:

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

END_OF_DOCUMENT_MARKER ```

Программирование с блокирующим сокетом радикально отличается от программирования с неблокирующим сокетом. Блокирующий сокет не требует цикла событий и, как правило, приводит к более простому коду. Однако в приложении 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::errorOccurred().

enum 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 Переопределение вспышки
96 Вспышка
64 Немедленно
32 Приоритет
0 Обычный

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

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

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

END_OF_DOCUMENT_MARKER

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

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

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

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

[signal] 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 не будет заполнен новой информацией при возвращении сигнала.

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

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

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

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

Возвращает 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.

Для сокетов 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() const.

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

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

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

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

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

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

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

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

Возвращает 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().

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

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.

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

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

QString QAbstractSocket::protocolTag() const

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

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

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

QNetworkProxy QAbstractSocket::proxy() const

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

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

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

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

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

Переопределяет: QIODevice::waitForBytesWritten(int msecs).

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

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

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

См. также 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. При работе на Windows рекомендуется использовать цикл событий и сигнал connected().

См. также 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. При работе на Windows рекомендуется использовать цикл событий и сигнал disconnected().

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

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

Переопределяет: QIODevice::waitForReadyRead(int msecs).

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

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

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

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

Spec-Zone.ru

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