Класс 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, ..., ReceiveBufferSizeSocketOption } |
| Перечисление | SocketState { UnconnectedState, HostLookupState, ConnectingState, ConnectedState, ..., ListeningState } |
| Перечисление | SocketType { TcpSocket, UdpSocket, SctpSocket, UnknownSocketType } |
Открытые функции
| QAbstractSocket(SocketType socketType, QObject *parent) | |
| virtual | ~QAbstractSocket() |
| void | abort() |
| bool | bind(const QHostAddress &address, quint16 port = 0, BindMode mode = DefaultForPlatform) |
| bool | bind(quint16 port = 0, BindMode mode = DefaultForPlatform) |
| virtual void | connectToHost(const QString &hostName, quint16 port, OpenMode openMode = ReadWrite, NetworkLayerProtocol protocol = AnyIPProtocol) |
| virtual void | connectToHost(const QHostAddress &address, quint16 port, OpenMode openMode = ReadWrite) |
| virtual void | disconnectFromHost() |
| SocketError | error() const |
| bool | flush() |
| bool | isValid() const |
| QHostAddress | localAddress() const |
| quint16 | localPort() const |
| PauseModes | pauseMode() const |
| QHostAddress | peerAddress() const |
| QString | peerName() const |
| quint16 | peerPort() const |
| QNetworkProxy | proxy() const |
| qint64 | readBufferSize() const |
| virtual void | resume() |
| void | setPauseMode(PauseModes pauseMode) |
| void | setProxy(const QNetworkProxy &networkProxy) |
| virtual void | setReadBufferSize(qint64 size) |
| virtual bool | setSocketDescriptor(qintptr socketDescriptor, SocketState socketState = ConnectedState, OpenMode openMode = ReadWrite) |
| virtual void | setSocketOption(QAbstractSocket::SocketOption option, const QVariant &value) |
| virtual qintptr | socketDescriptor() const |
| virtual QVariant | socketOption(QAbstractSocket::SocketOption option) |
| SocketType | socketType() const |
| SocketState | state() const |
| virtual bool | waitForConnected(int msecs = 30000) |
| virtual bool | waitForDisconnected(int msecs = 30000) |
Реализованные открытые функции
| virtual bool | atEnd() const |
| virtual qint64 | bytesAvailable() const |
| virtual qint64 | bytesToWrite() const |
| virtual bool | canReadLine() const |
| virtual void | close() |
| virtual bool | isSequential() const |
| virtual bool | waitForBytesWritten(int msecs = 30000) |
| virtual bool | waitForReadyRead(int msecs = 30000) |
Сигналы
| 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(SocketError socketError) |
| void | setSocketState(SocketState state) |
Переопределённые защищённые функции
| virtual qint64 | readData(char *data, qint64 maxSize) |
| virtual qint64 | readLineData(char *data, qint64 maxlen) |
| virtual qint64 | writeData(const char *data, qint64 size) |
Дополнительные унаследованные члены
- 1 свойство унаследовано от QObject
- 1 открытый слот унаследован от QObject
- 11 статических открытых членов унаследовано от QObject
Подробное описание
Класс QAbstractSocket предоставляет базовые функции, общие для всех типов сокетов.
QAbstractSocket — базовый класс для QTcpSocket и QUdpSocket и содержит все общие функции этих двух классов. Если вам нужен сокет, у вас есть два варианта:
- Создайте экземпляр QTcpSocket или QUdpSocket.
- Создайте дескриптор системного сокета, создайте экземпляр QAbstractSocket и вызовите setSocketDescriptor() для обертывания системного сокета.
TCP (Протокол управления передачей) — надёжный, потоковый, ориентированный на соединение транспортный протокол. UDP (Протокол пользовательских датаграмм) — ненадежный, ориентированный на датаграммы, бессоединительный протокол. На практике TCP лучше подходит для непрерывной передачи данных, а более лёгкий UDP можно использовать, когда надёжность не важна.
API QAbstractSocket объединяет большинство различий между двумя протоколами. Например, хотя UDP бессоединительный, connectToHost() устанавливает виртуальное соединение для UDP-сокетов, позволяя вам использовать QAbstractSocket более или менее одинаково независимо от базового протокола. Внутри QAbstractSocket запоминает адрес и порт, переданные connectToHost(), и такие функции, как read() и write(), используют эти значения.
В любое время QAbstractSocket имеет состояние (возвращаемое state()). Начальное состояние — UnconnectedState. После вызова connectToHost() сокет сначала переходит в состояние HostLookupState. Если хост найден, QAbstractSocket переходит в ConnectingState и испускает сигнал hostFound(). Когда соединение установлено, он переходит в состояние ConnectedState и испускает connected(). Если на каком-либо этапе возникает ошибка, испускается error(). Всякий раз, когда состояние меняется, испускается stateChanged(). Для удобства isValid() возвращает true, если сокет готов для чтения и записи, но обратите внимание, что состояние сокета должно быть ConnectedState перед чтением и записью.
Чтение или запись данных выполняется путём вызова read() или write(), или с использованием удобных функций readLine() и readAll(). QAbstractSocket также наследует getChar(), putChar() и ungetChar() из QIODevice, которые работают с отдельными байтами. Сигнал bytesWritten() испускается, когда данные были записаны в сокет. Обратите внимание, что Qt не ограничивает размер буфера записи. Вы можете контролировать его размер, прослушивая этот сигнал.
Сигнал readyRead() испускается каждый раз, когда новый фрагмент данных прибывает. bytesAvailable() затем возвращает количество байтов, доступных для чтения. Как правило, вы бы подключили сигнал readyRead() к слоту и прочитали все доступные данные там. Если вы не читаете все данные сразу, оставшиеся данные всё ещё будут доступны позже, а любые новые входящие данные будут добавлены к внутреннему буферу чтения QAbstractSocket. Чтобы ограничить размер буфера чтения, вызовите setReadBufferSize().
Для закрытия сокета вызовите disconnectFromHost(). QAbstractSocket переходит в состояние QAbstractSocket::ClosingState. После того как все ожидающие данные были записаны в сокет, QAbstractSocket фактически закрывает сокет, переходит в состояние QAbstractSocket::UnconnectedState и испускает сигнал disconnected(). Если вы хотите немедленно прервать соединение, отбросив все ожидающие данные, вызовите abort() вместо этого. Если удалённый хост закрывает соединение, QAbstractSocket отправит ошибку (QAbstractSocket::RemoteHostClosedError), при этом состояние сокета всё ещё будет ConnectedState, а затем будет испущен сигнал disconnected().
Порт и адрес подключённого узла получаются путём вызова peerPort() и peerAddress(). peerName() возвращает имя хоста узла, как указано в connectToHost(). localPort() и localAddress() возвращают порт и адрес локального сокета.
QAbstractSocket предоставляет набор функций, которые приостанавливают вызывающую нить до тех пор, пока не будут испущены определённые сигналы. Эти функции могут использоваться для реализации блокирующих сокетов:
- waitForConnected() блокируется до тех пор, пока соединение не будет установлено.
- waitForReadyRead() блокируется до тех пор, пока новые данные не будут доступны для чтения.
- waitForBytesWritten() блокируется до тех пор, пока один пакет данных не будет записан в сокет.
- waitForDisconnected() блокируется до тех пор, пока соединение не будет закрыто.
Мы показываем пример:
int numRead = 0, numReadTotal = 0;
char buffer[50];
forever {
numRead = socket.read(buffer, 50);
// do whatever with array
numReadTotal += numRead;
if (numRead == 0 && !socket.waitForReadyRead())
break;
} Если waitForReadyRead() возвращает false, соединение было закрыто или произошла ошибка.
Программирование с помощью блокирующего сокета радикально отличается от программирования с неблокирующим сокетом. Блокирующий сокет не требует цикла обработки событий и обычно приводит к более простому коду. Однако в приложении GUI блокирующие сокеты должны использоваться только в потоках, не связанных с GUI, чтобы избежать зависания пользовательского интерфейса. См. примеры fortuneclient и blockingfortuneclient для обзора обоих подходов.
Примечание: Мы не рекомендуем использовать блокирующие функции вместе с сигналами. Следует использовать один из двух вариантов.
QAbstractSocket можно использовать с QTextStream и QDataStream операторами потока (operator<<() и operator>>()). Однако следует учитывать одну проблему: необходимо убедиться, что достаточно данных доступно перед их чтением с помощью оператора>>().
См. также QNetworkAccessManager и QTcpServer.
Документация по типам членов
enum QAbstractSocket::BindFlagflags QAbstractSocket::BindMode
Этот перечисление описывает различные флаги, которые можно передать для изменения поведения QAbstractSocket::bind().
| Константа | Значение | Описание |
|---|---|---|
QAbstractSocket::ShareAddress |
0x1 |
Разрешить другим службам привязываться к тому же адресу и порту. Это полезно, когда несколько процессов совместно несут нагрузку одной службы, прослушивая один и тот же адрес и порт (например, веб-сервер с несколькими предварительно разветвленными слушателями может значительно улучшить время отклика). Однако, поскольку любая служба может повторно привязаться, этот параметр имеет определенные соображения безопасности. Обратите внимание, что комбинируя этот параметр с ReuseAddressHint, вы также разрешите своей службе повторно привязаться к существующему совместно используемому адресу. В Unix это эквивалентно параметру сокета SO_REUSEADDR. В Windows этот параметр игнорируется. |
QAbstractSocket::DontShareAddress |
0x2 |
Привязать адрес и порт исключительно, так что другим службам не разрешается повторно привязываться. Передав этот параметр QAbstractSocket::bind(), вы гарантируете, что при успешном выполнении ваша служба является единственной, которая прослушивает адрес и порт. Никакие службы не могут повторно привязаться, даже если они передают ReuseAddressHint. Этот параметр обеспечивает большую безопасность, чем ShareAddress, но на некоторых операционных системах требует запуска сервера с правами администратора. В Unix и macOS по умолчанию поведение для привязки адреса и порта не совместно, поэтому этот параметр игнорируется. В Windows используется параметр сокета SO_EXCLUSIVEADDRUSE. |
QAbstractSocket::ReuseAddressHint |
0x4 |
Предоставляет подсказку для QAbstractSocket о том, что он должен попытаться повторно привязать службу, даже если адрес и порт уже привязаны другим сокетом. В Windows и Unix это эквивалентно параметру сокета SO_REUSEADDR. |
QAbstractSocket::DefaultForPlatform |
0x0 |
Параметр по умолчанию для текущей платформы. В Unix и macOS это эквивалентно (DontShareAddress + ReuseAddressHint), а в Windows — ShareAddress. |
Это перечисление было добавлено или изменено в Qt 5.0.
Тип BindMode — это псевдоним для QFlags<BindFlag>. Он хранит логическое ИЛИ комбинацию значений BindFlag.
enum QAbstractSocket::NetworkLayerProtocol
Это перечисление описывает значения протокола сетевого уровня, используемые в Qt.
| Константа | Значение | Описание |
|---|---|---|
QAbstractSocket::IPv4Protocol |
0 |
IPv4 |
QAbstractSocket::IPv6Protocol |
1 |
IPv6 |
QAbstractSocket::AnyIPProtocol |
2 |
IPv4 или IPv6 |
QAbstractSocket::UnknownNetworkLayerProtocol |
-1 |
Другие, кроме IPv4 и IPv6 |
См. также QHostAddress::protocol().
enum QAbstractSocket::PauseModeflags QAbstractSocket::PauseModes
Это перечисление описывает поведение, когда сокет должен приостановить передачу данных. В настоящее время поддерживается только уведомление QSslSocket::sslErrors().
| Константа | Значение | Описание |
|---|---|---|
QAbstractSocket::PauseNever |
0x0 |
Не приостанавливать передачу данных по сокету. Это значение по умолчанию и соответствует поведению Qt 4. |
QAbstractSocket::PauseOnSslErrors |
0x1 |
Приостановить передачу данных по сокету при получении уведомления об ошибке SSL. То есть QSslSocket::sslErrors(). |
Это перечисление было добавлено или изменено в Qt 5.0.
Тип PauseModes — это псевдоним для QFlags<PauseMode>. Он хранит логическое ИЛИ комбинацию значений PauseMode.
enum QAbstractSocket::SocketError
Это перечисление описывает возможные ошибки сокета.
| Константа | Значение | Описание |
|---|---|---|
QAbstractSocket::ConnectionRefusedError |
0 |
Подключение отклонено удалённым узлом (или истекло время ожидания). |
QAbstractSocket::RemoteHostClosedError |
1 |
Удаленный узел закрыл подключение. Обратите внимание, что сокет клиента (т.е., этот сокет) будет закрыт после отправки уведомления о закрытии удалённого узла. |
QAbstractSocket::HostNotFoundError |
2 |
Адрес узла не найден. |
QAbstractSocket::SocketAccessError |
3 |
Операция с сокетом не выполнена из-за отсутствия необходимых привилегий у приложения. |
QAbstractSocket::SocketResourceError |
4 |
Локальная система исчерпала ресурсы (например, слишком много сокетов). |
QAbstractSocket::SocketTimeoutError |
5 |
Операция с сокетом истекла по времени. |
QAbstractSocket::DatagramTooLargeError |
6 |
Размер датаграммы превысил ограничение операционной системы (которое может быть настолько низким, как 8192 байта). |
QAbstractSocket::NetworkError |
7 |
Произошла ошибка в сети (например, сетевой кабель был случайно отключен). |
QAbstractSocket::AddressInUseError |
8 |
Указанный в QAbstractSocket::bind() адрес уже используется и был установлен как эксклюзивный. |
QAbstractSocket::SocketAddressNotAvailableError |
9 |
Указанный в QAbstractSocket::bind() адрес не принадлежит узлу. |
См. также QAbstractSocket::error().
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. |
Возможные значения для 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().
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(SocketType socketType, QObject *parent)
Создает новый абстрактный сокет типа socketType. Аргумент parent передается конструктору QObject.
См. также socketType(), QTcpSocket и QUdpSocket.
[virtual] QAbstractSocket::~QAbstractSocket()
Удаляет сокет.
void QAbstractSocket::abort()
Прерывает текущее соединение и сбрасывает сокет. В отличие от disconnectFromHost(), эта функция немедленно закрывает сокет, отбрасывая любые ожидающие данные в буфере записи.
См. также disconnectFromHost() и close().
[virtual] bool QAbstractSocket::atEnd() const
Переопределяет метод QIODevice::atEnd().
Возвращает true если больше нет доступных данных для чтения; в противном случае возвращает false.
Эта функция наиболее часто используется при чтении данных из сокета в цикле. Например:
// This slot is connected to QAbstractSocket::readyRead()
void SocketClass::readyReadSlot()
{
while (!socket.atEnd()) {
QByteArray data = socket.read(100);
....
}
} См. также bytesAvailable() и readyRead().
bool QAbstractSocket::bind(const QHostAddress &address, quint16 port = 0, BindMode mode = DefaultForPlatform)
Привязывает к address на порту port, используя режим BindMode mode.
Привязывает этот сокет к адресу address и порту port.
Для UDP-сокетов после привязки сигнал QUdpSocket::readyRead() генерируется всякий раз, когда UDP-дейтаграмма прибывает по указанному адресу и порту. Таким образом, эта функция полезна для написания UDP-серверов.
Для TCP-сокетов эта функция может использоваться для указания интерфейса для исходящего соединения, что полезно в случае нескольких сетевых интерфейсов.
По умолчанию сокет привязывается с использованием DefaultForPlatform BindMode. Если порт не указан, выбирается случайный порт.
При успехе функция возвращает true и сокет переходит в состояние BoundState; в противном случае она возвращает false.
Эта функция была введена в Qt 5.0.
bool QAbstractSocket::bind(quint16 port = 0, BindMode mode = DefaultForPlatform)
Это перегруженная функция.
Привязывает к QHostAddress:Any на порту port, используя режим BindMode mode.
По умолчанию сокет привязывается с использованием DefaultForPlatform BindMode. Если порт не указан, выбирается случайный порт.
Эта функция была введена в Qt 5.0.
[virtual] qint64 QAbstractSocket::bytesAvailable() const
Переопределяет метод QIODevice::bytesAvailable().
Возвращает количество входящих байтов, ожидающих чтения.
См. также bytesToWrite() и read().
[virtual] qint64 QAbstractSocket::bytesToWrite() const
Переопределяет метод QIODevice::bytesToWrite().
Возвращает количество байтов, ожидающих записи. Байты записываются, когда управление возвращается в цикл событий или когда вызывается flush().
См. также bytesAvailable() и flush().
END_OF_DOCUMENT_MARKER
[virtual] bool QAbstractSocket::canReadLine() const
Реализовано повторно из QIODevice::canReadLine().
Возвращает true если из сокета можно прочитать строку данных; в противном случае возвращает false.
См. также readLine().
[virtual] void QAbstractSocket::close()
Реализовано повторно из QIODevice::close().
Закрывает устройство ввода-вывода для сокета и вызывает disconnectFromHost() для закрытия соединения сокета.
См. QIODevice::close() для описания действий, выполняемых при закрытии устройства ввода-вывода.
См. также abort().
[virtual] void QAbstractSocket::connectToHost(const QString &hostName, quint16 port, OpenMode openMode = ReadWrite, 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, OpenMode openMode = ReadWrite)
Это перегруженный метод.
Попытка установить соединение с address на порту port.
[signal] void QAbstractSocket::connected()
Этот сигнал испускается после вызова connectToHost() и успешного установления соединения.
Примечание: На некоторых операционных системах сигнал connected() может быть непосредственно испущен из вызова connectToHost() для соединений с localhost.
См. также connectToHost() и disconnected().
[virtual] void QAbstractSocket::disconnectFromHost()
Попытка закрыть сокет. Если есть ожидающие записи данные, QAbstractSocket перейдет в состояние ClosingState и будет ждать, пока все данные не будут записаны. В конечном итоге он перейдет в состояние UnconnectedState и испустит сигнал disconnected().
См. также connectToHost().
[signal] void QAbstractSocket::disconnected()
Этот сигнал испускается при разрыве соединения с сокетом.
Предупреждение: Если вам необходимо удалить отправителя (sender) этого сигнала в слоте, подключённом к нему, используйте функцию deleteLater().
См. также connectToHost(), disconnectFromHost() и abort().
SocketError QAbstractSocket::error() const
Возвращает тип последней произошедшей ошибки.
См. также state() и errorString().
[signal] void QAbstractSocket::error(QAbstractSocket::SocketError socketError)
Этот сигнал испускается после возникновения ошибки. Параметр socketError описывает тип произошедшей ошибки.
Когда испускается этот сигнал, сокет может быть не готов к попытке повторного подключения. В этом случае попытки повторного подключения должны выполняться из цикла обработки событий. Например, используйте QTimer::singleShot() с таймаутом 0.
QAbstractSocket::SocketError — это не зарегистрированный метатип, поэтому для очереди соединений вам нужно зарегистрировать его с помощью Q_DECLARE_METATYPE() и qRegisterMetaType().
Примечание: Сигнал error перегружен в этом классе. Для подключения к этому сигналу с использованием синтаксиса указателя на функцию Qt предоставляет удобную вспомогательную функцию для получения указателя на функцию, как показано в этом примере:
connect(abstractSocket, QOverload<QAbstractSocket::SocketError>::of(&QAbstractSocket::error),
[=](QAbstractSocket::SocketError socketError){ /* ... */ }); См. также error(), errorString() и Создание пользовательских типов Qt.
bool QAbstractSocket::flush()
Эта функция записывает как можно больше данных из внутреннего буфера записи в сетевой сокет, не блокируя. Если какие-либо данные были записаны, функция возвращает true; в противном случае возвращается false.
Вызовите эту функцию, если вам нужно, чтобы QAbstractSocket начал отправлять буферизованные данные немедленно. Количество успешно записанных байтов зависит от операционной системы. В большинстве случаев вы не нуждаетесь в вызове этой функции, так как QAbstractSocket начнёт отправлять данные автоматически после возвращения управления в цикл обработки событий. В отсутствие цикла обработки событий вызовите waitForBytesWritten() вместо этого.
См. также write() и waitForBytesWritten().
[signal] void QAbstractSocket::hostFound()
Этот сигнал испускается после вызова connectToHost() и успешного завершения поиска хоста.
Примечание: Начиная с Qt 4.6.3, QAbstractSocket может испускать hostFound() непосредственно из вызова connectToHost(), так как результат DNS может быть кэширован.
См. также connected().
[virtual] bool QAbstractSocket::isSequential() const
Реализовано повторно из QIODevice::isSequential().
bool QAbstractSocket::isValid() const
Возвращает true если сокет валиден и готов к использованию; в противном случае возвращает false.
Примечание: Состояние сокета должно быть ConnectedState перед чтением и записью.
См. также state().
QHostAddress QAbstractSocket::localAddress() const
Возвращает адрес хоста локального сокета, если доступен; в противном случае возвращает QHostAddress::Null.
Обычно это основной IP-адрес хоста, но может быть QHostAddress::LocalHost (127.0.0.1) для соединений с локальным хостом.
См. также localPort(), peerAddress() и setLocalAddress().
quint16 QAbstractSocket::localPort() const
Возвращает номер порта хоста локального сокета (в родном порядке байтов), если доступен; в противном случае возвращает 0.
См. также localAddress(), peerPort() и setLocalPort().
PauseModes QAbstractSocket::pauseMode() const
Возвращает режим паузы данного сокета.
Эта функция была добавлена в Qt 5.0.
См. также setPauseMode() и resume().
QHostAddress QAbstractSocket::peerAddress() const
Возвращает адрес подключенного узла, если сокет находится в состоянии ConnectedState; в противном случае возвращает QHostAddress::Null.
См. также peerName(), peerPort(), localAddress() и setPeerAddress().
QString QAbstractSocket::peerName() const
Возвращает имя удалённого узла, заданное при вызове connectToHost(), или пустую QString, если connectToHost() не вызывался.
См. также peerAddress(), peerPort() и setPeerName().
quint16 QAbstractSocket::peerPort() const
Возвращает порт подключенного узла, если сокет находится в состоянии ConnectedState; в противном случае возвращает 0.
См. также peerAddress(), localPort() и setPeerPort().
QNetworkProxy QAbstractSocket::proxy() const
Возвращает сетевой прокси для данного сокета. По умолчанию используется QNetworkProxy::DefaultProxy, что означает, что этот сокет запросит параметры прокси по умолчанию для приложения.
Эта функция была добавлена в Qt 4.1.
См. также setProxy(), QNetworkProxy и QNetworkProxyFactory.
[signal] void QAbstractSocket::proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator)
Этот сигнал может быть выпущен, когда используется прокси, требующий аутентификации. Объект authenticator может быть заполнен необходимыми данными для аутентификации и продолжения соединения.
Примечание: Невозможно использовать QueuedConnection для подключения к этому сигналу, так как подключение завершится неудачей, если объект authenticator не заполнен новой информацией к моменту возврата сигнала.
Эта функция была добавлена в Qt 4.3.
См. также QAuthenticator и QNetworkProxy.
qint64 QAbstractSocket::readBufferSize() const
Возвращает размер внутреннего буфера чтения. Это ограничение на количество данных, которое клиент может принять, прежде чем вызовете read() или readAll().
Размер буфера чтения, равный 0 (по умолчанию), означает, что буфер не имеет ограничений по размеру, обеспечивая, что данные не потеряются.
См. также setReadBufferSize() и read().
[virtual protected] qint64 QAbstractSocket::readData(char *data, qint64 maxSize)
Переопределено из QIODevice::readData().
[virtual protected] qint64 QAbstractSocket::readLineData(char *data, qint64 maxlen)
Переопределено из QIODevice::readLineData().
[virtual] void QAbstractSocket::resume()
Продолжает передачу данных по сокету. Этот метод следует использовать только после того, как сокет был приостановлен при получении уведомлений, и было получено уведомление. В настоящее время поддерживается только уведомление QSslSocket::sslErrors(). Вызов этого метода, если сокет не приостановлен, приводит к неопределённому поведению.
Эта функция была добавлена в Qt 5.0.
См. также pauseMode() и setPauseMode().
[protected] void QAbstractSocket::setLocalAddress(const QHostAddress &address)
Устанавливает адрес локальной стороны соединения на address.
Вы можете вызвать эту функцию в подклассе QAbstractSocket, чтобы изменить возвращаемое значение функции localAddress() после установления соединения. Эта функция обычно используется прокси-соединениями для виртуальных настроек соединения.
Обратите внимание, что эта функция не привязывает локальный адрес сокета до подключения (например, QAbstractSocket::bind()).
Эта функция была добавлена в Qt 4.1.
См. также localAddress(), setLocalPort() и setPeerAddress().
[protected] void QAbstractSocket::setLocalPort(quint16 port)
Устанавливает порт локальной стороны соединения на port.
Вы можете вызвать эту функцию в подклассе QAbstractSocket, чтобы изменить возвращаемое значение функции localPort() после установления соединения. Эта функция обычно используется прокси-соединениями для виртуальных настроек соединения.
Обратите внимание, что эта функция не привязывает локальный порт сокета до подключения (например, QAbstractSocket::bind()).
Эта функция была добавлена в Qt 4.1.
См. также localPort(), localAddress(), setLocalAddress() и setPeerPort().
void QAbstractSocket::setPauseMode(PauseModes pauseMode)
Управляет приостановкой при получении уведомления. Параметр pauseMode определяет условия, при которых сокет должен быть приостановлен. В настоящее время поддерживается только уведомление QSslSocket::sslErrors(). Если установлено значение PauseOnSslErrors, передача данных по сокету будет приостановлена и должна быть снова включена явным образом с помощью вызова resume(). По умолчанию этот параметр установлен на PauseNever. Этот параметр необходимо вызвать до подключения к серверу, в противном случае это приведёт к неопределённому поведению.
Эта функция была добавлена в Qt 5.0.
См. также pauseMode() и resume().
[protected] void QAbstractSocket::setPeerAddress(const QHostAddress &address)
Устанавливает адрес удалённой стороны соединения на address.
Вы можете вызвать эту функцию в подклассе QAbstractSocket, чтобы изменить возвращаемое значение функции peerAddress() после установления соединения. Эта функция обычно используется прокси-соединениями для виртуальных настроек соединения.
Эта функция была добавлена в Qt 4.1.
См. также peerAddress(), setPeerPort() и setLocalAddress().
[protected] void QAbstractSocket::setPeerName(const QString &name)
Устанавливает имя хоста удалённого узла на name.
Вы можете вызвать эту функцию в подклассе QAbstractSocket, чтобы изменить возвращаемое значение функции peerName() после установления соединения. Эта функция обычно используется прокси-соединениями для виртуальных настроек соединения.
Эта функция была добавлена в Qt 4.1.
См. также peerName().
[protected] void QAbstractSocket::setPeerPort(quint16 port)
Устанавливает порт удалённой стороны соединения на port.
Вы можете вызвать эту функцию в подклассе QAbstractSocket, чтобы изменить возвращаемое значение функции peerPort() после установления соединения. Эта функция обычно используется прокси-соединениями для виртуальных настроек соединения.
Эта функция была добавлена в Qt 4.1.
См. также peerPort(), setPeerAddress() и setLocalPort().
void QAbstractSocket::setProxy(const QNetworkProxy &networkProxy)
Устанавливает явный сетевой прокси для данного сокета на networkProxy.
Для отключения использования прокси для данного сокета используйте тип прокси QNetworkProxy::NoProxy:
socket->setProxy(QNetworkProxy::NoProxy);
Значение прокси по умолчанию — QNetworkProxy::DefaultProxy, что означает, что сокет будет использовать настройки приложения: если прокси установлен с помощью QNetworkProxy::setApplicationProxy, он будет его использовать; в противном случае, если фабрика установлена с помощью QNetworkProxyFactory::setApplicationProxyFactory, он запросит эту фабрику с типом QNetworkProxyQuery::TcpSocket.
Эта функция была добавлена в Qt 4.1.
См. также proxy(), QNetworkProxy и QNetworkProxyFactory::queryProxy().
[virtual] void QAbstractSocket::setReadBufferSize(qint64 size)
Устанавливает размер внутреннего буфера чтения QAbstractSocket на size байт.
Если размер буфера ограничен определённым размером, QAbstractSocket не будет буферизовать более этого размера данных. В исключительных случаях размер буфера 0 означает, что буфер чтения не ограничен и все входящие данные буферизуются. Это значение по умолчанию.
Этот параметр полезен, если вы читаете данные только в определённые моменты времени (например, в приложении для потоковой передачи в реальном времени) или если вы хотите защитить свой сокет от получения слишком большого объёма данных, что в конечном итоге может привести к исчерпанию памяти в вашем приложении.
Только QTcpSocket использует внутренний буфер QAbstractSocket; QUdpSocket вообще не использует никакой буферизации, а вместо этого полагается на неявную буферизацию, предоставляемую операционной системой. Из-за этого вызов этой функции для QUdpSocket не имеет эффекта.
См. также readBufferSize() и read().
[virtual] bool QAbstractSocket::setSocketDescriptor(qintptr socketDescriptor, SocketState socketState = ConnectedState, OpenMode openMode = ReadWrite)
Инициализирует QAbstractSocket с помощью нативного дескриптора сокета socketDescriptor. Возвращает true если socketDescriptor принят как допустимый дескриптор сокета; в противном случае возвращает false. Сокет открывается в режиме, указанном openMode, и переходит в состояние сокета, указанное socketState. Буферы чтения и записи очищаются, отбрасывая любые ожидающие данные.
Примечание: Невозможно инициализировать два абстрактных сокета с одним и тем же нативным дескриптором сокета.
См. также socketDescriptor().
[protected] void QAbstractSocket::setSocketError(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(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().
SocketType QAbstractSocket::socketType() const
Возвращает тип сокета (TCP, UDP или другой).
См. также QTcpSocket и QUdpSocket.
SocketState QAbstractSocket::state() const
Возвращает состояние сокета.
См. также error().
[signal] void QAbstractSocket::stateChanged(QAbstractSocket::SocketState socketState)
Этот сигнал излучается всякий раз, когда состояние QAbstractSocket изменяется. Параметр socketState — новое состояние.
QAbstractSocket::SocketState — не зарегистрированный тип метаданных, поэтому для очереди подключений вам необходимо зарегистрировать его с помощью Q_DECLARE_METATYPE() и qRegisterMetaType().
См. также state() и Создание пользовательских типов Qt.
[virtual] bool QAbstractSocket::waitForBytesWritten(int msecs = 30000)
Переопределено из QIODevice::waitForBytesWritten().
Эта функция блокируется до тех пор, пока хотя бы один байт не будет записан в сокет и не будет выпущен сигнал bytesWritten(). Функция будет ожидать до истечения времени msecs миллисекунд; время ожидания по умолчанию составляет 30000 миллисекунд.
Функция возвращает true если сигнал bytesWritten() выпущен; в противном случае она возвращает false (если произошла ошибка или операция закончилась по тайм-ауту).
Примечание: Эта функция может случайным образом завершаться на Windows. Рассмотрите использование цикла событий и сигнала bytesWritten(), если ваше приложение будет работать на Windows.
См. также waitForReadyRead().
[virtual] bool QAbstractSocket::waitForConnected(int msecs = 30000)
Ожидает подключения к сокету до msecs миллисекунд. Если соединение установлено, функция возвращает true; в противном случае она возвращает false. В случае возврата false, вы можете вызвать error(), чтобы определить причину ошибки.
Следующий пример ожидает до одной секунды установления подключения:
socket->connectToHost("imap", 143);
if (socket->waitForConnected(1000))
qDebug("Connected!"); Если msecs равно -1, функция не будет ожидать по тайм-ауту.
Примечание: Эта функция может немного дольше ожидать, чем msecs, в зависимости от времени, необходимого для завершения поиска хоста.
Примечание: Несколько вызовов этой функции не накапливают время. Если функция завершается по тайм-ауту, процесс подключения будет прерван.
Примечание: Эта функция может случайным образом завершаться на Windows. Рассмотрите использование цикла событий и сигнала connected(), если ваше приложение будет работать на Windows.
См. также connectToHost() и connected().
[virtual] bool QAbstractSocket::waitForDisconnected(int msecs = 30000)
Ожидает разъединения сокета до msecs миллисекунд. Если соединение было разъединено, эта функция возвращает true; в противном случае она возвращает false. В случае возврата false, вы можете вызвать error(), чтобы определить причину ошибки.
Следующий пример ожидает до одной секунды закрытия соединения:
socket->disconnectFromHost();
if (socket->state() == QAbstractSocket::UnconnectedState ||
socket->waitForDisconnected(1000))
qDebug("Disconnected!"); Если msecs равно -1, функция не будет ожидать по тайм-ауту.
Примечание: Эта функция может случайным образом завершаться на Windows. Рассмотрите использование цикла событий и сигнала disconnected(), если ваше приложение будет работать на Windows.
См. также disconnectFromHost() и close().
[virtual] bool QAbstractSocket::waitForReadyRead(int msecs = 30000)
Переопределено из QIODevice::waitForReadyRead().
Эта функция блокируется до тех пор, пока новые данные не станут доступны для чтения, и не будет выпущен сигнал readyRead(). Функция будет ожидать до истечения времени msecs миллисекунд; время ожидания по умолчанию составляет 30000 миллисекунд.
Функция возвращает true если сигнал readyRead() выпущен и новые данные доступны для чтения; в противном случае она возвращает false (если произошла ошибка или операция закончилась по тайм-ауту).
Примечание: Эта функция может случайным образом завершаться на Windows. Рассмотрите использование цикла событий и сигнала readyRead(), если ваше приложение будет работать на Windows.
См. также waitForBytesWritten().
[virtual protected] qint64 QAbstractSocket::writeData(const char *data, qint64 size)
Переопределено из QIODevice::writeData().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.9/qabstractsocket.html