Класс QAbstractSocket
Класс QAbstractSocket предоставляет базовые функции, общие для всех типов сокетов. Подробнее...
| Заголовок: | #include <QAbstractSocket> |
| CMake: | find_package(Qt6 COMPONENTS Network REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Network) |
| qmake: | QT += network |
| Наследуется от: | QIODevice |
| Наследует: |
Примечание: Все функции в этом классе являются входными в многопоточном режиме.
Типы публичного доступа
| перечисление | 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, QIODeviceBase::OpenMode openMode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol) |
| void | connectToHost(const QHostAddress &address, quint16 port, QIODeviceBase::OpenMode openMode = ReadWrite) |
| виртуальный void | disconnectFromHost() |
| QAbstractSocket::SocketError | error() const |
| bool | flush() |
| bool | isValid() const |
| QHostAddress | localAddress() const |
| quint16 | localPort() const |
| QAbstractSocket::PauseModes | pauseMode() const |
| QHostAddress | peerAddress() const |
| QString | peerName() const |
| quint16 | peerPort() const |
| QString | protocolTag() const |
| QNetworkProxy | proxy() const |
| qint64 | readBufferSize() const |
| виртуальный void | resume() |
| void | setPauseMode(QAbstractSocket::PauseModes pauseMode) |
| void | setProtocolTag(const QString &tag) |
| void | setProxy(const QNetworkProxy &networkProxy) |
| виртуальный void | setReadBufferSize(qint64 size) |
| виртуальный bool | setSocketDescriptor(qintptr socketDescriptor, QAbstractSocket::SocketState socketState = ConnectedState, QIODeviceBase::OpenMode openMode = ReadWrite) |
| виртуальный void | setSocketOption(QAbstractSocket::SocketOption option, const QVariant &value) |
| виртуальный qintptr | socketDescriptor() const |
| виртуальный QVariant | socketOption(QAbstractSocket::SocketOption option) |
| QAbstractSocket::SocketType | socketType() const |
| QAbstractSocket::SocketState | state() const |
| виртуальный bool | waitForConnected(int msecs = 30000) |
| виртуальный bool | waitForDisconnected(int msecs = 30000) |
Реализованные публичные функции
| virtual qint64 | bytesAvailable() const override |
| virtual qint64 | bytesToWrite() const override |
| virtual void | close() override |
| virtual bool | isSequential() const override |
| virtual bool | waitForBytesWritten(int msecs = 30000) override |
| virtual 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) |
Переопределённые защищённые функции
| virtual qint64 | readData(char *data, qint64 maxSize) override |
| virtual qint64 | readLineData(char *data, qint64 maxlen) override |
| virtual qint64 | skipData(qint64 maxSize) override |
| virtual 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, соединение было закрыто или произошла ошибка.
Программирование с использованием блокирующего сокета радикально отличается от программирования с использованием неблокирующего сокета. Блокирующий сокет не требует цикла событий и обычно приводит к более простому коду. Однако в приложении с графическим интерфейсом блокирующие сокеты следует использовать только в потоках, не связанных с графическим интерфейсом, чтобы избежать зависания интерфейса пользователя. Обратитесь к примерам fortuneclient и blockingfortuneclient для ознакомления с обоими подходами.
Примечание: Мы не рекомендуем использовать блокирующие функции вместе со сигналами. Следует использовать один из двух вариантов.
QAbstractSocket можно использовать с QTextStream и QDataStream операторами потока (operator<<() и operator>>()). Однако есть один момент, о котором следует помнить: перед попыткой чтения данных с помощью operator>>() необходимо убедиться, что достаточно данных доступно.
См. также QNetworkAccessManager и QTcpServer.
Документация типов членов
[since 5.0] перечисление QAbstractSocket::BindFlagфлаги QAbstractSocket::BindMode
Это перечисление описывает различные флаги, которые вы можете передать, чтобы изменить поведение QAbstractSocket::bind().
| Постоянная | Значение | Описание |
|---|---|---|
QAbstractSocket::ShareAddress |
0x1 |
Разрешить другим службам привязываться к тому же адресу и порту. Это полезно, когда несколько процессов разделяют нагрузку одной службы, прослушивая один и тот же адрес и порт (например, веб-сервер с несколькими предварительно разветвлёнными слушателями может значительно улучшить время отклика). Однако, поскольку любая служба может повторно привязаться, этот параметр имеет определённые соображения безопасности. Обратите внимание, что сочетание этого параметра с ReuseAddressHint также позволит вашей службе повторно привязать существующий общий адрес. В Unix это эквивалентно параметру сокета SO_REUSEADDR. В Windows это стандартное поведение, поэтому этот параметр игнорируется. |
QAbstractSocket::DontShareAddress |
0x2 |
Привязать адрес и порт исключительно, чтобы другим службам не разрешалось повторно привязываться. Передав этот параметр в QAbstractSocket::bind(), вы гарантируете, что в случае успеха ваша служба будет единственной, прослушивающей указанный адрес и порт. Никаким службам не разрешается повторно привязываться, даже если они передают ReuseAddressHint. Этот параметр обеспечивает большую безопасность, чем ShareAddress, но на некоторых операционных системах он требует запуска сервера с правами администратора. В Unix и macOS по умолчанию не допускается совместное использование привязки адреса и порта, поэтому этот параметр игнорируется. В Windows этот параметр использует параметр сокета SO_EXCLUSIVEADDRUSE. |
QAbstractSocket::ReuseAddressHint |
0x4 |
Предоставляет подсказку QAbstractSocket, что он должен попытаться повторно привязать службу, даже если адрес и порт уже привязаны другим сокетом. В Windows и Unix это эквивалентно параметру сокета SO_REUSEADDR. |
QAbstractSocket::DefaultForPlatform |
0x0 |
Параметр по умолчанию для текущей платформы. В Unix и macOS он эквивалентен (DontShareAddress + ReuseAddressHint), а в Windows — ShareAddress. |
Это перечисление было добавлено или изменено в Qt 5.0.
Тип BindMode является псевдонимом для QFlags<BindFlag>. Он хранит результат объединения по битовому ИЛИ значений BindFlag.
перечисление QAbstractSocket::NetworkLayerProtocol
Это перечисление описывает значения протоколов сетевого уровня, используемые в Qt.
| Постоянная | Значение | Описание |
|---|---|---|
QAbstractSocket::IPv4Protocol |
0 |
IPv4 |
QAbstractSocket::IPv6Protocol |
1 |
IPv6 |
QAbstractSocket::AnyIPProtocol |
2 |
IPv4 или IPv6 |
QAbstractSocket::UnknownNetworkLayerProtocol |
-1 |
Другие, кроме IPv4 и IPv6 |
См. также QHostAddress::protocol().
[since 5.0] перечисление QAbstractSocket::PauseModeфлаги QAbstractSocket::PauseModes
Это перечисление описывает поведение, когда сокет должен приостанавливать передачу данных. В настоящее время поддерживается только уведомление QSslSocket::sslErrors().
| Постоянная | Значение | Описание |
|---|---|---|
QAbstractSocket::PauseNever |
0x0 |
Не приостанавливать передачу данных по сокету. Это значение по умолчанию и соответствует поведению Qt 4. |
QAbstractSocket::PauseOnSslErrors |
0x1 |
Приостановить передачу данных по сокету при получении уведомления об ошибке SSL. Т.е. QSslSocket::sslErrors(). |
Это перечисление было добавлено или изменено в Qt 5.0.
Тип PauseModes является псевдонимом для QFlags<PauseMode>. Он хранит результат объединения по битовому ИЛИ значений PauseMode.
перечисление QAbstractSocket::SocketError
Это перечисление описывает ошибки сокета, которые могут возникнуть.
| Константа | Значение | Описание |
|---|---|---|
QAbstractSocket::ConnectionRefusedError |
0 |
Подключение отклонено удалённой стороной (или истекло время ожидания). |
QAbstractSocket::RemoteHostClosedError |
1 |
Удалённый хост закрыл подключение. Обратите внимание, что клиентский сокет (т.е. этот сокет) будет закрыт после отправки уведомления о закрытии удалённой стороной. |
QAbstractSocket::HostNotFoundError |
2 |
Адрес хоста не найден. |
QAbstractSocket::SocketAccessError |
3 |
Операция с сокетом не выполнена из-за отсутствия необходимых привилегий у приложения. |
QAbstractSocket::SocketResourceError |
4 |
Локальная система исчерпала ресурсы (например, слишком много сокетов). |
QAbstractSocket::SocketTimeoutError |
5 |
Операция с сокетом истекла по времени. |
QAbstractSocket::DatagramTooLargeError |
6 |
Размер дейтаграммы превысил системный лимит (который может быть до 8192 байт). |
QAbstractSocket::NetworkError |
7 |
Возникла ошибка в сети (например, сетевой кабель случайно отсоединили). |
QAbstractSocket::AddressInUseError |
8 |
Указанный адрес для QAbstractSocket::bind() уже используется и был задан как эксклюзивный. |
QAbstractSocket::SocketAddressNotAvailableError |
9 |
Указанный адрес для QAbstractSocket::bind() не принадлежит хосту. |
QAbstractSocket::UnsupportedSocketOperationError |
10 |
Запрошенная операция с сокетом не поддерживается локальной операционной системой (например, отсутствует поддержка IPv6). |
QAbstractSocket::ProxyAuthenticationRequiredError |
12 |
Сокет использует прокси, и прокси требует аутентификации. |
QAbstractSocket::SslHandshakeFailedError |
13 |
Не удалось выполнить рукопожатие SSL/TLS, поэтому подключение было закрыто (используется только в QSslSocket). |
QAbstractSocket::UnfinishedSocketOperationError |
11 |
Используется только QAbstractSocketEngine. Последняя попытка операции еще не завершена (по-прежнему выполняется в фоновом режиме). |
QAbstractSocket::ProxyConnectionRefusedError |
14 |
Не удалось связаться с сервером прокси, так как подключение к этому серверу было отклонено |
QAbstractSocket::ProxyConnectionClosedError |
15 |
Подключение к прокси-серверу было неожиданно закрыто (до того, как было установлено подключение к конечному узлу) |
QAbstractSocket::ProxyConnectionTimeoutError |
16 |
Подключение к прокси-серверу истекло по времени или прокси-сервер перестал отвечать на этапе аутентификации. |
QAbstractSocket::ProxyNotFoundError |
17 |
Адрес прокси, заданный с помощью setProxy() (или прокси приложения), не найден. |
QAbstractSocket::ProxyProtocolError |
18 |
Не удалось установить соединение с прокси-сервером, так как ответ прокси-сервера не был понят. |
QAbstractSocket::OperationError |
19 |
Попытка операции была предпринята, когда сокет находился в состоянии, которое не допускало её. |
QAbstractSocket::SslInternalError |
20 |
Используемая SSL-библиотека сообщила об внутренней ошибке. Вероятно, это связано с неправильной установкой или настройкой библиотеки. |
QAbstractSocket::SslInvalidUserDataError |
21 |
Были предоставлены неверные данные (сертификат, ключ, шифр и т. д.), и их использование привело к ошибке в SSL-библиотеке. |
QAbstractSocket::TemporaryError |
22 |
Произошла временная ошибка (например, операция заблокируется, а сокет неблокирующийся). |
QAbstractSocket::UnknownSocketError |
-1 |
Произошла неопределённая ошибка. |
См. также QAbstractSocket::error() и QAbstractSocket::errorOccurred().
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 |
Возвращает значение PMTU (Path Maximum Transmission Unit) пути, в настоящее время известное стеку IP, если таковое имеется. Некоторые стеки IP также позволяют задавать MTU для передачи. Это значение перечисления было введено в Qt 5.11. |
Возможные значения для TypeOfServiceOption:
| Значение | Описание |
|---|---|
| 224 | Управление сетью |
| 192 | Управление межсетевой средой |
| 160 | CRITIC/ECP |
| 128 | Переопределение вспышки |
| 96 | Вспышка |
| 64 | Немедленно |
| 32 | Приоритет |
| 0 | Обычное |
См. также QAbstractSocket::setSocketOption() и QAbstractSocket::socketOption().
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().
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() для соединений с хостом localhost.
См. также connectToHost() и disconnected().
[signal] void QAbstractSocket::disconnected()
Этот сигнал испускается, когда сокет был отключён.
Предупреждение: Если вам нужно удалить sender() этого сигнала в подключённом к нему слоте, используйте функцию deleteLater().
См. также connectToHost(), disconnectFromHost() и abort().
[signal, since 5.15] void QAbstractSocket::errorOccurred(QAbstractSocket::SocketError socketError)
Этот сигнал испускается после возникновения ошибки. Параметр socketError описывает тип произошедшей ошибки.
Когда испускается этот сигнал, сокет может быть не готов к попытке повторного подключения. В этом случае попытки повторного подключения должны выполняться из цикла событий. Например, используйте QTimer::singleShot() с 0 в качестве таймаута.
QAbstractSocket::SocketError не является зарегистрированным метатипом, поэтому для очереди соединений вам необходимо зарегистрировать его с помощью Q_DECLARE_METATYPE() и qRegisterMetaType().
Эта функция была представлена в Qt 5.15.
См. также error(), errorString() и Создание пользовательских типов Qt.
[signal] void QAbstractSocket::hostFound()
Этот сигнал испускается после вызова connectToHost(), когда поиск хоста завершён успешно.
Примечание: Начиная с Qt 4.6.3, QAbstractSocket может испускать hostFound() непосредственно из вызова connectToHost(), так как результат DNS может быть кэширован.
См. также connected().
[signal] void QAbstractSocket::proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator)
Этот сигнал может испускаться при использовании proxy, требующей аутентификации. Объект authenticator затем может быть заполнен необходимыми данными для аутентификации и продолжения соединения.
Примечание: Невозможно использовать QueuedConnection для подключения к этому сигналу, так как соединение завершится неудачно, если authenticator не будет заполнен новой информацией, когда сигнал возвращается.
См. также QAuthenticator и QNetworkProxy.
[signal] void QAbstractSocket::stateChanged(QAbstractSocket::SocketState socketState)
Этот сигнал испускается всякий раз, когда состояние QAbstractSocket изменяется. Параметр socketState — это новое состояние.
QAbstractSocket::SocketState не является зарегистрированным метатипом, поэтому для очереди соединений вам необходимо зарегистрировать его с помощью Q_DECLARE_METATYPE() и qRegisterMetaType().
См. также state() и Создание пользовательских типов Qt.
[virtual] QAbstractSocket::~QAbstractSocket()
Уничтожает сокет.
void QAbstractSocket::abort()
Прерывает текущее подключение и сбрасывает сокет. В отличие от disconnectFromHost(), эта функция немедленно закрывает сокет, игнорируя любые ожидающие данные в буфере записи.
См. также disconnectFromHost() и close().
[virtual, since 5.0] bool QAbstractSocket::bind(const QHostAddress &address, quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform)
Привязывает сокет к address на порту port, используя BindMode mode.
Для UDP-сокетов после привязки испускается сигнал QUdpSocket::readyRead() всякий раз, когда на указанный адрес и порт поступает UDP-датаграмма. Таким образом, эта функция полезна для написания UDP-серверов.
Для TCP-сокетов эта функция может использоваться для указания интерфейса, который следует использовать для исходящего подключения, что полезно в случае нескольких сетевых интерфейсов.
По умолчанию сокет привязывается с помощью DefaultForPlatform BindMode. Если порт не указан, выбирается случайный порт.
При успехе функция возвращает true и сокет переходит в состояние BoundState; в противном случае возвращает false.
Эта функция была представлена в Qt 5.0.
[since 5.0] bool QAbstractSocket::bind(quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform)
Это перегруженная функция.
Привязывает сокет к QHostAddress:Any на порту port, используя BindMode mode.
По умолчанию сокет привязывается с помощью DefaultForPlatform BindMode. Если порт не указан, выбирается случайный порт.
Эта функция была представлена в Qt 5.0.
[override virtual] qint64 QAbstractSocket::bytesAvailable() const
Реализует QIODevice::bytesAvailable() const.
Возвращает количество входящих байтов, ожидающих чтения.
См. также bytesToWrite() и read().
[override virtual] qint64 QAbstractSocket::bytesToWrite() const
Реализует QIODevice::bytesToWrite() const.
Возвращает количество байтов, ожидающих записи. Байты записываются, когда управление возвращается в цикл событий или когда вызывается flush().
См. также bytesAvailable() и flush().
[override virtual] void QAbstractSocket::close()
Реализует QIODevice::close().
Закрывает устройство ввода-вывода для сокета и вызывает disconnectFromHost() для закрытия подключения сокета.
См. QIODevice::close() для описания действий, выполняемых при закрытии устройства ввода-вывода.
См. также abort().
[virtual] void QAbstractSocket::connectToHost(const QString &hostName, quint16 port, QIODeviceBase::OpenMode openMode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol)
Попытка установить соединение с hostName на заданном port. Параметр protocol можно использовать для указания сетевого протокола (например, IPv4 или IPv6).
Сокет открывается в заданном режиме openMode и сначала переходит в состояние HostLookupState, затем выполняет поиск имени хоста hostName. Если поиск успешен, отправляется сигнал hostFound(), и QAbstractSocket переходит в состояние ConnectingState. Затем он пытается подключиться к адресу или адресам, возвращённым результатом поиска. Наконец, если соединение установлено, QAbstractSocket переходит в состояние ConnectedState и отправляет сигнал connected().
В любой момент сокет может отправить сигнал errorOccurred(), чтобы сообщить об ошибке.
hostName может быть IP-адресом в строковом формате (например, "43.195.83.32"), или именем хоста (например, "example.com"). QAbstractSocket будет выполнять поиск только при необходимости. port указан в порядке байтов по умолчанию.
См. также state(), peerName(), peerAddress(), peerPort() и waitForConnected().
void QAbstractSocket::connectToHost(const QHostAddress &address, quint16 port, QIODeviceBase::OpenMode openMode = ReadWrite)
Эта функция перегружена.
Попытка установить соединение с address на порту port.
[virtual] void QAbstractSocket::disconnectFromHost()
Попытка закрыть сокет. Если есть ожидающие записи данные, QAbstractSocket перейдёт в состояние ClosingState и подождёт, пока все данные не будут записаны. В конечном итоге он перейдёт в состояние UnconnectedState и отправит сигнал disconnected().
См. также connectToHost().
QAbstractSocket::SocketError QAbstractSocket::error() const
Возвращает тип последней произошедшей ошибки.
См. также state() и errorString().
bool QAbstractSocket::flush()
Эта функция записывает как можно больше данных из внутреннего буфера записи в подлежащий сетевой сокет без блокировки. Если какие-либо данные были записаны, функция возвращает true; в противном случае возвращается false.
Вызовите эту функцию, если вам нужно, чтобы QAbstractSocket немедленно начал отправлять буферизованные данные. Количество успешно записанных байтов зависит от операционной системы. В большинстве случаев вам не нужно вызывать эту функцию, так как QAbstractSocket автоматически начнёт отправлять данные, как только управление вернётся в цикл событий. При отсутствии цикла событий, вызовите waitForBytesWritten() вместо этого.
См. также write() и waitForBytesWritten().
[override virtual] bool QAbstractSocket::isSequential() const
Переопределяет: QIODevice::isSequential() const.
bool QAbstractSocket::isValid() const
Возвращает true , если сокет валиден и готов к использованию; в противном случае возвращает false.
Примечание: Состояние сокета должно быть ConnectedState, прежде чем можно будет читать и записывать.
См. также state().
QHostAddress QAbstractSocket::localAddress() const
Возвращает адрес хоста локального сокета, если он доступен; в противном случае возвращает QHostAddress::Null.
Обычно это основной IP-адрес хоста, но может быть QHostAddress::LocalHost (127.0.0.1) для подключений к локальному хосту.
См. также localPort(), peerAddress() и setLocalAddress().
quint16 QAbstractSocket::localPort() const
Возвращает номер порта хоста локального сокета (в порядке байтов по умолчанию), если он доступен; в противном случае возвращает 0.
См. также localAddress(), peerPort() и setLocalPort().
[since 5.0] QAbstractSocket::PauseModes QAbstractSocket::pauseMode() const
Возвращает режим паузы данного сокета.
Эта функция была введена в Qt 5.0.
См. также setPauseMode() и resume().
QHostAddress QAbstractSocket::peerAddress() const
Возвращает адрес подключенного узла, если сокет находится в состоянии ConnectedState; в противном случае возвращает QHostAddress::Null.
См. также peerName(), peerPort(), localAddress() и setPeerAddress().
QString QAbstractSocket::peerName() const
Возвращает имя узла, заданное функцией connectToHost(), или пустую строку QString, если функция connectToHost() не была вызвана.
См. также peerAddress(), peerPort() и setPeerName().
quint16 QAbstractSocket::peerPort() const
Возвращает порт подключённого узла, если сокет находится в состоянии ConnectedState; в противном случае возвращает 0.
См. также peerAddress(), localPort() и setPeerPort().
[since 5.13] QString QAbstractSocket::protocolTag() const
Возвращает тег протокола для данного сокета. Если тег протокола задан, он передаётся в QNetworkProxyQuery при его внутреннем создании, чтобы указать тег протокола, который следует использовать.
Эта функция была введена в Qt 5.13.
См. также setProtocolTag() и QNetworkProxyQuery.
QNetworkProxy QAbstractSocket::proxy() const
Возвращает сетевой прокси для этого сокета. По умолчанию используется QNetworkProxy::DefaultProxy, что означает, что этот сокет запросит настройки прокси по умолчанию для приложения.
См. также setProxy(), QNetworkProxy и QNetworkProxyFactory.
qint64 QAbstractSocket::readBufferSize() const
Возвращает размер внутреннего буфера чтения. Это ограничивает количество данных, которые клиент может получить, прежде чем вы вызовете read() или readAll().
Размер буфера чтения 0 (по умолчанию) означает, что буфер не имеет ограничения по размеру, гарантируя, что данные не потеряются.
См. также setReadBufferSize() и read().
[override virtual protected] qint64 QAbstractSocket::readData(char *data, qint64 maxSize)
Переопределяет: QIODevice::readData(char *data, qint64 maxSize).
[override virtual protected] qint64 QAbstractSocket::readLineData(char *data, qint64 maxlen)
Переопределяет: QIODevice::readLineData(char *data, qint64 maxSize).
[virtual, since 5.0] void QAbstractSocket::resume()
Продолжает передачу данных по сокету. Этот метод следует использовать только после того, как сокет был приостановлен для уведомлений и было получено уведомление. В настоящее время поддерживается только уведомление QSslSocket::sslErrors(). Вызов этого метода, если сокет не приостановлен, приведёт к неопределённому поведению.
Эта функция была введена в Qt 5.0.
См. также pauseMode() и setPauseMode().
[protected] void QAbstractSocket::setLocalAddress(const QHostAddress &address)
Устанавливает адрес на локальной стороне соединения в address.
Вы можете вызвать эту функцию в подклассе QAbstractSocket, чтобы изменить возвращаемое значение функции localAddress() после установления соединения. Эта функция обычно используется для прокси-соединений для настройки виртуальных подключений.
Обратите внимание, что эта функция не связывает локальный адрес сокета до подключения (например, QAbstractSocket::bind()).
См. также localAddress(), setLocalPort() и setPeerAddress().
[protected] void QAbstractSocket::setLocalPort(quint16 port)
Устанавливает порт локальной стороны подключения в port.
Вы можете вызвать эту функцию в подклассе QAbstractSocket, чтобы изменить возвращаемое значение функции localPort() после установления подключения. Эта функция обычно используется при прокси-подключениях для настройки виртуальных подключений.
Обратите внимание, что эта функция не связывает локальный порт сокета до подключения (например, QAbstractSocket::bind()).
См. также localPort(), localAddress(), setLocalAddress() и setPeerPort().
[since 5.0] void QAbstractSocket::setPauseMode(QAbstractSocket::PauseModes pauseMode)
Управляет приостановкой при получении уведомления. Параметр pauseMode определяет условия, при которых сокет должен быть приостановлен. В настоящее время поддерживается только уведомление QSslSocket::sslErrors(). Если установлено значение PauseOnSslErrors, передача данных по сокету будет приостановлена и должна быть включена повторно, вызвав resume(). По умолчанию этот параметр установлен в PauseNever. Этот параметр должен быть вызван до подключения к серверу, иначе поведение будет неопределенным.
Эта функция была введена в Qt 5.0.
См. также pauseMode() и resume().
[protected] void QAbstractSocket::setPeerAddress(const QHostAddress &address)
Устанавливает адрес удалённой стороны подключения в address.
Вы можете вызвать эту функцию в подклассе QAbstractSocket, чтобы изменить возвращаемое значение функции peerAddress() после установления подключения. Эта функция обычно используется при прокси-подключениях для настройки виртуальных подключений.
См. также peerAddress(), setPeerPort() и setLocalAddress().
[protected] void QAbstractSocket::setPeerName(const QString &name)
Устанавливает имя хоста удалённого узла в name.
Вы можете вызвать эту функцию в подклассе QAbstractSocket, чтобы изменить возвращаемое значение функции peerName() после установления подключения. Эта функция обычно используется при прокси-подключениях для настройки виртуальных подключений.
См. также peerName().
[protected] void QAbstractSocket::setPeerPort(quint16 port)
Устанавливает порт удалённой стороны подключения в port.
Вы можете вызвать эту функцию в подклассе QAbstractSocket, чтобы изменить возвращаемое значение функции peerPort() после установления подключения. Эта функция обычно используется при прокси-подключениях для настройки виртуальных подключений.
См. также peerPort(), setPeerAddress() и setLocalPort().
[since 5.13] void QAbstractSocket::setProtocolTag(const QString &tag)
Устанавливает метку протокола для этого сокета в tag.
Эта функция была введена в Qt 5.13.
См. также protocolTag().
void QAbstractSocket::setProxy(const QNetworkProxy &networkProxy)
Устанавливает явное сетевое прокси для этого сокета в networkProxy.
Чтобы отключить использование прокси для этого сокета, используйте тип прокси QNetworkProxy::NoProxy:
socket->setProxy(QNetworkProxy::NoProxy);
Значение по умолчанию для прокси — QNetworkProxy::DefaultProxy, что означает, что сокет будет использовать настройки приложения: если прокси установлен с помощью QNetworkProxy::setApplicationProxy, он будет использоваться; в противном случае, если фабрика установлена с помощью QNetworkProxyFactory::setApplicationProxyFactory, он будет запрашивать эту фабрику с типом QNetworkProxyQuery::TcpSocket.
См. также proxy(), QNetworkProxy и QNetworkProxyFactory::queryProxy().
[virtual] void QAbstractSocket::setReadBufferSize(qint64 size)
Устанавливает размер внутреннего буфера чтения QAbstractSocket в size байтов.
Если размер буфера ограничен, QAbstractSocket не будет буферизовать больше данных, чем этот размер. В исключительных случаях размер буфера 0 означает, что буфер чтения не ограничен, и все входящие данные буферизуются. Это значение по умолчанию.
Этот параметр полезен, если вы читаете данные только в определённые моменты времени (например, в приложении для потоковой передачи в реальном времени) или если вы хотите защитить свой сокет от получения слишком большого количества данных, что может привести к недостатку памяти в вашем приложении.
Только QTcpSocket использует внутренний буфер QAbstractSocket; QUdpSocket вообще не использует никакой буферизации, а полагается на неявную буферизацию, предоставляемую операционной системой. Из-за этого вызов этой функции для QUdpSocket не оказывает никакого влияния.
См. также readBufferSize() и read().
[virtual] bool QAbstractSocket::setSocketDescriptor(qintptr socketDescriptor, QAbstractSocket::SocketState socketState = ConnectedState, QIODeviceBase::OpenMode openMode = ReadWrite)
Инициализирует QAbstractSocket с помощью дескриптора нативного сокета socketDescriptor. Возвращает true если socketDescriptor принят как действительный дескриптор сокета; в противном случае возвращает false. Сокет открывается в режиме, указанном в openMode, и переходит в состояние сокета, указанное в socketState. Буферы чтения и записи очищаются, отбрасывая любые ожидающие данные.
Примечание: Невозможно инициализировать два абстрактных сокета с помощью одного и того же дескриптора нативного сокета.
См. также socketDescriptor().
[protected] void QAbstractSocket::setSocketError(QAbstractSocket::SocketError socketError)
Устанавливает тип ошибки, которая произошла последний, в socketError.
См. также setSocketState() и setErrorString().
[virtual] void QAbstractSocket::setSocketOption(QAbstractSocket::SocketOption option, const QVariant &value)
Устанавливает заданный option в значение, описанное в value.
Примечание: В среде Windows Runtime, QAbstractSocket::KeepAliveOption должен быть установлен до подключения к сокету.
См. также socketOption().
[protected] void QAbstractSocket::setSocketState(QAbstractSocket::SocketState state)
Устанавливает состояние сокета в state.
См. также state().
[override virtual protected] qint64 QAbstractSocket::skipData(qint64 maxSize)
Переопределяет: QIODevice::skipData(qint64 maxSize).
[virtual] qintptr QAbstractSocket::socketDescriptor() const
Возвращает дескриптор нативного сокета объекта QAbstractSocket, если он доступен; в противном случае возвращает -1.
Если сокет использует QNetworkProxy, возвращённый дескриптор может быть неиспользуем с функциями нативных сокетов.
Дескриптор сокета недоступен, когда QAbstractSocket находится в состоянии UnconnectedState.
См. также setSocketDescriptor().
END_OF_DOCUMENT_MARKER
[virtual] QVariant QAbstractSocket::socketOption(QAbstractSocket::SocketOption option)
Возвращает значение параметра option.
См. также setSocketOption().
QAbstractSocket::SocketType QAbstractSocket::socketType() const
Возвращает тип сокета (TCP, UDP или другой).
См. также QTcpSocket и QUdpSocket.
QAbstractSocket::SocketState QAbstractSocket::state() const
Возвращает состояние сокета.
См. также error().
[override virtual] bool QAbstractSocket::waitForBytesWritten(int msecs = 30000)
Переопределяет: QIODevice::waitForBytesWritten(int msecs).
Эта функция блокируется, пока не будет записан хотя бы один байт в сокет и не будет испущен сигнал bytesWritten(). Функция будет ожидать msecs миллисекунд; значение по умолчанию — 30000 миллисекунд.
Функция возвращает true если сигнал bytesWritten() испущен; в противном случае она возвращает false (если произошла ошибка или операция истекла).
Примечание: Эта функция может случайным образом завершаться сбоем в Windows. Рассмотрите использование цикла событий и сигнала bytesWritten(), если ваше ПО будет работать под Windows.
См. также waitForReadyRead().
[virtual] bool QAbstractSocket::waitForConnected(int msecs = 30000)
Ожидает, пока сокет не подключится, в течение msecs миллисекунд. Если соединение установлено, эта функция возвращает true; в противном случае — false. В случае возврата false, вы можете вызвать error() для определения причины ошибки.
Следующий пример ожидает до одной секунды, пока не будет установлено соединение:
socket->connectToHost("imap", 143);
if (socket->waitForConnected(1000))
qDebug("Connected!"); Если msecs равно -1, эта функция не будет ограничена по времени.
Примечание: Эта функция может ожидать немного дольше, чем msecs, в зависимости от времени, необходимого для завершения поиска хоста.
Примечание: Несколько вызовов этой функции не суммируют время ожидания. Если функция истекает, процесс подключения прерывается.
Примечание: Эта функция может случайным образом завершаться сбоем в Windows. Рассмотрите использование цикла событий и сигнала connected() если ваше ПО будет работать под Windows.
См. также connectToHost() и connected().
[virtual] bool QAbstractSocket::waitForDisconnected(int msecs = 30000)
Ожидает, пока сокет не отключится, в течение msecs миллисекунд. Если соединение было успешно отключено, эта функция возвращает true; в противном случае — false (если операция истекла, произошла ошибка или этот QAbstractSocket уже отключен). В случае возврата false, вы можете вызвать error() для определения причины ошибки.
Следующий пример ожидает до одной секунды, пока соединение не будет закрыто:
socket->disconnectFromHost();
if (socket->state() == QAbstractSocket::UnconnectedState
|| socket->waitForDisconnected(1000)) {
qDebug("Disconnected!");
} Если msecs равно -1, эта функция не будет ограничена по времени.
Примечание: Эта функция может случайным образом завершаться сбоем в Windows. Рассмотрите использование цикла событий и сигнала disconnected() если ваше ПО будет работать под Windows.
См. также disconnectFromHost() и close().
[override virtual] bool QAbstractSocket::waitForReadyRead(int msecs = 30000)
Переопределяет: QIODevice::waitForReadyRead(int msecs).
Эта функция блокируется, пока новые данные не станут доступны для чтения, и не будет испущен сигнал readyRead(). Функция будет ожидать msecs миллисекунд; значение по умолчанию — 30000 миллисекунд.
Функция возвращает true если сигнал readyRead() испущен и новые данные доступны для чтения; в противном случае она возвращает false (если произошла ошибка или операция истекла).
Примечание: Эта функция может случайным образом завершаться сбоем в Windows. Рассмотрите использование цикла событий и сигнала readyRead() если ваше ПО будет работать под Windows.
См. также waitForBytesWritten().
[override virtual protected] qint64 QAbstractSocket::writeData(const char *data, qint64 size)
Переопределяет: QIODevice::writeData(const char *data, qint64 maxSize).
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/qabstractsocket.html