Класс QAbstractSocket
Класс QAbstractSocket предоставляет базовые функции, общие для всех типов сокетов. Подробнее...
| Заголовок: | #include <QAbstractSocket> |
| qmake: | QT += network |
| Наследует: | QIODevice |
| Наследуется: |
Примечание: Все функции в этом классе являются реентерабельными.
Публичные типы
| перечисление | 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 |
| 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 | error(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(). Если на каком-либо этапе произойдёт ошибка, испускается 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, соединение было закрыто или произошла ошибка.
Программирование с использованием блокирующего сокета радикально отличается от программирования с неблокирующим сокетом. Блокирующий сокет не требует цикла событий и, как правило, приводит к более простому коду. Однако в приложении с графическим интерфейсом блокирующие сокеты следует использовать только в потоках, не связанных с графическим интерфейсом, чтобы избежать зависания пользовательского интерфейса. См. примеры fortuneclient и blockingfortuneclient для обзора обоих подходов.
Примечание: Мы не рекомендуем использовать блокирующие функции вместе с сигналами. Следует использовать один из двух вариантов.
QAbstractSocket можно использовать с QTextStream и QDataStream операторами потоков (operator<<() и 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.
[signal] void QAbstractSocket::connected()
Этот сигнал испускается после вызова connectToHost() и успешного установления соединения.
Примечание: На некоторых операционных системах сигнал connected() может быть непосредственно испущен из вызова connectToHost() для соединений с локальным хостом.
См. также connectToHost() и disconnected().
[signal] void QAbstractSocket::disconnected()
Этот сигнал испускается при разрыве соединения сокета.
Предупреждение: Если вам нужно удалить sender() этого сигнала в слоте, подключённом к нему, используйте функцию deleteLater().
См. также connectToHost(), disconnectFromHost() и abort().
[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.
[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().
END_OF_DOCUMENT_MARKER ```Закрывает устройство ввода-вывода для сокета и вызывает 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.
[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. Вместо неё используйте цикл событий и сигнал 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(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-5.13/qabstractsocket.html