Класс QTcpServer
Класс QTcpServer предоставляет сервер на основе протокола TCP. Подробнее...
| Заголовок: | #include <QTcpServer> |
| CMake: | find_package(Qt6 COMPONENTS Network REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Network) |
| qmake: | QT += network |
| Наследует: | QObject |
| Наследует от: |
Примечание: Все функции в этом классе являются многопоточными.
Открытые функции
| QTcpServer(QObject *parent = nullptr) | |
| virtual | ~QTcpServer() |
| void | закрыть() |
| QString | ошибкаСтрока() const |
| virtual bool | естьОжидающиеПодключения() const |
| bool | прослушивает() const |
| bool | прослушивать(const QHostAddress &address = QHostAddress::Any, quint16 port = 0) |
| int | максОжидаемыхПодключений() const |
| virtual QTcpSocket * | следующееОжидаемоеПодключение() |
| void | приостановитьПриём() |
| QNetworkProxy | прокси() const |
| void | восстановитьПриём() |
| QHostAddress | адресСервера() const |
| QAbstractSocket::SocketError | ошибкаСервера() const |
| quint16 | портСервера() const |
| void | установитьМаксОжидаемыхПодключений(int numConnections) |
| void | установитьПрокси(const QNetworkProxy &networkProxy) |
| bool | установитьДескрипторСокета(qintptr socketDescriptor) |
| qintptr | дескрипторСокета() const |
| bool | подождатьНовоеПодключение(int msec = 0, bool *timedOut = nullptr) |
Сигналы
| void | ошибкаПриёма(QAbstractSocket::SocketError socketError) |
| void | новоеПодключение() |
Защищенные функции
| void | добавитьОжидающееПодключение(QTcpSocket *socket) |
| virtual void | входящееПодключение(qintptr socketDescriptor) |
Подробное описание
Этот класс позволяет принимать входящие подключения TCP. Вы можете указать порт или позволить QTcpServer выбрать его автоматически. Вы можете прослушивать определённый адрес или все адреса машины.
Вызовите прослушивать(), чтобы сервер начал прослушивать входящие соединения. Затем сигнал новоеПодключение() будет излучаться каждый раз, когда клиент подключается к серверу.
Вызовите следующееОжидаемоеПодключение(), чтобы принять ожидающее подключение как подключенный QTcpSocket. Функция возвращает указатель на QTcpSocket в состоянии QAbstractSocket::ConnectedState, который можно использовать для связи с клиентом.
Если произошла ошибка, ошибкаСервера() возвращает тип ошибки, а ошибкаСтрока() можно вызвать, чтобы получить удобочитаемое описание произошедшего.
При прослушивании подключений адрес и порт, на которых прослушивает сервер, доступны как адресСервера() и портСервера().
Вызов закрыть() заставляет QTcpServer прекратить прослушивание входящих подключений.
Хотя QTcpServer в основном предназначен для использования с циклом событий, его можно использовать и без него. В этом случае необходимо использовать подождатьНовоеПодключение(), которое блокирует выполнение, пока не будет доступно подключение или не истечёт время ожидания.
См. также QTcpSocket, Пример сервера прогнозов, Пример многопоточного сервера прогнозов, Пример с обратной связью и Пример торрент-сервера.
Документация функций-членов
QTcpServer::QTcpServer(QObject *parent = nullptr)
Конструктор объекта QTcpServer.
parent передаётся конструктору QObject.
См. также прослушивать() и установитьДескрипторСокета().
[signal, since 5.0] void QTcpServer::acceptError(QAbstractSocket::SocketError socketError)
Этот сигнал излучается, когда приём нового подключения приводит к ошибке. Параметр socketError описывает тип произошедшей ошибки.
Эта функция была добавлена в Qt 5.0.
См. также приостановитьПриём() и восстановитьПриём().
[signal] void QTcpServer::newConnection()
Этот сигнал излучается каждый раз, когда доступно новое подключение.
См. также естьОжидающиеПодключения() и следующееОжидаемоеПодключение().
[virtual] QTcpServer::~QTcpServer()
Удаляет объект QTcpServer. Если сервер прослушивает подключения, сокет автоматически закрывается.
Любые клиентские QTcpSocket, которые всё ещё подключены, должны либо отключиться, либо быть перенаправлены к новому родителю, прежде чем сервер будет удалён.
См. также закрыть().
[protected] void QTcpServer::addPendingConnection(QTcpSocket *socket)
Эта функция вызывается QTcpServer::incomingConnection() для добавления socket в список ожидаемых входящих подключений.
Примечание: Не забудьте вызвать этот член из переопределённой incomingConnection(), если вы не хотите сломать механизм ожидающих подключений.
См. также входящееПодключение().
void QTcpServer::close()
Закрывает сервер. Сервер больше не будет прослушивать входящие подключения.
См. также прослушивать().
QString QTcpServer::errorString() const
Возвращает удобочитаемое описание последней произошедшей ошибки.
См. также ошибкаСервера().
[virtual] bool QTcpServer::hasPendingConnections() const
Возвращает true если сервер имеет ожидающее подключение; в противном случае возвращает false.
См. также следующееОжидаемоеПодключение() и установитьМаксОжидаемыхПодключений().
[virtual protected] void QTcpServer::incomingConnection(qintptr socketDescriptor)
Этот виртуальный метод вызывается QTcpServer, когда доступно новое подключение. Аргумент socketDescriptor — это дескриптор сокета для принятого соединения.
Базовая реализация создает QTcpSocket, устанавливает дескриптор сокета, а затем сохраняет QTcpSocket в внутреннем списке ожидающих подключений. Наконец, генерируется сигнал newConnection().
Переопределите этот метод для изменения поведения сервера при поступлении подключения.
Если на сервере используется QNetworkProxy, то socketDescriptor может быть неприменим для функций работы с сокетами, и следует использовать только QTcpSocket::setSocketDescriptor().
Примечание: Если в переопределении этого метода создается другой сокет, его необходимо добавить к механизму ожидания подключений, вызвав addPendingConnection().
Примечание: Если вы хотите обработать входящее подключение как новый объект QTcpSocket в другом потоке, необходимо передать socketDescriptor в другой поток, создать там объект QTcpSocket и использовать его метод setSocketDescriptor().
См. также newConnection(), nextPendingConnection() и addPendingConnection().
bool QTcpServer::isListening() const
Возвращает true, если сервер в данный момент прослушивает входящие подключения; в противном случае возвращает false.
См. также listen().
bool QTcpServer::listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0)
Заставляет сервер прослушивать входящие подключения по адресу address и порту port. Если port равен 0, порт выбирается автоматически. Если address равен QHostAddress::Any, сервер будет прослушивать все сетевые интерфейсы.
Возвращает true при успехе; в противном случае возвращает false.
См. также isListening().
int QTcpServer::maxPendingConnections() const
Возвращает максимальное количество ожидающих подключений. По умолчанию значение равно 30.
См. также setMaxPendingConnections() и hasPendingConnections().
[virtual] QTcpSocket *QTcpServer::nextPendingConnection()
Возвращает следующее ожидающее подключение в виде подключенного объекта QTcpSocket.
Сокет создается как дочерний элемент сервера, что означает, что он автоматически удаляется при уничтожении объекта QTcpServer. Тем не менее, рекомендуется явно удалять объект, когда он больше не нужен, чтобы избежать потерь памяти.
Возвращает nullptr если функция вызывается, когда нет ожидающих подключений.
Примечание: Возвращаемый объект QTcpSocket не может быть использован из другого потока. Если вы хотите использовать входящее подключение из другого потока, вам нужно переопределить incomingConnection().
См. также hasPendingConnections().
[since 5.0] void QTcpServer::pauseAccepting()
Приостанавливает прием новых подключений. Очередные подключения останутся в очереди.
Эта функция была введена в Qt 5.0.
См. также resumeAccepting().
QNetworkProxy QTcpServer::proxy() const
Возвращает сетевой прокси для этого сокета. По умолчанию используется QNetworkProxy::DefaultProxy.
См. также setProxy() и QNetworkProxy.
[since 5.0] void QTcpServer::resumeAccepting()
Возобновляет прием новых подключений.
Эта функция была введена в Qt 5.0.
См. также pauseAccepting().
QHostAddress QTcpServer::serverAddress() const
Возвращает адрес сервера, если сервер прослушивает подключения; в противном случае возвращает QHostAddress::Null.
См. также serverPort() и listen().
QAbstractSocket::SocketError QTcpServer::serverError() const
Возвращает код ошибки последней произошедшей ошибки.
См. также errorString().
quint16 QTcpServer::serverPort() const
Возвращает порт сервера, если сервер прослушивает подключения; в противном случае возвращает 0.
См. также serverAddress() и listen().
void QTcpServer::setMaxPendingConnections(int numConnections)
Устанавливает максимальное количество ожидающих принятых подключений в numConnections. QTcpServer примет не более numConnections входящих подключений, прежде чем будет вызван nextPendingConnection(). По умолчанию ограничение составляет 30 ожидающих подключений.
Клиенты все еще могут подключиться после того, как сервер достигнет максимального количества ожидающих подключений (т.е., QTcpSocket по-прежнему может излучить сигнал connected()). QTcpServer прекратит прием новых подключений, но операционная система может сохранить их в очереди.
См. также maxPendingConnections() и hasPendingConnections().
void QTcpServer::setProxy(const QNetworkProxy &networkProxy)
Устанавливает явный сетевой прокси для этого сокета на networkProxy.
Чтобы отключить использование прокси для этого сокета, используйте тип прокси QNetworkProxy::NoProxy:
server->setProxy(QNetworkProxy::NoProxy);
См. также proxy() и QNetworkProxy.
bool QTcpServer::setSocketDescriptor(qintptr socketDescriptor)
Устанавливает дескриптор сокета, который этот сервер должен использовать при прослушивании входящих подключений, на socketDescriptor. Возвращает true если сокет установлен успешно; в противном случае возвращает false.
Предполагается, что сокет находится в состоянии прослушивания.
См. также socketDescriptor() и isListening().
qintptr QTcpServer::socketDescriptor() const
Возвращает дескриптор системного сокета, используемый сервером для прослушивания входящих соединений, или -1, если сервер не прослушивает соединения.
Если сервер использует QNetworkProxy, возвращаемый дескриптор может быть недействителен для функций работы с сокетами.
См. также setSocketDescriptor() и isListening().
bool QTcpServer::waitForNewConnection(int msec = 0, bool *timedOut = nullptr)
Ожидает не более msec миллисекунд или пока доступно новое входящее подключение. Возвращает true если подключение доступно; в противном случае возвращает false. Если операция завершилась по тайм-ауту и timedOut не nullptr, *timedOut будет установлено в true.
Это блокирующая функция. Не рекомендуется использовать в однопоточных приложениях с графическим интерфейсом, так как всё приложение перестанет отвечать до возврата функции. waitForNewConnection() в основном используется, когда нет цикла событий.
Альтернативой является подсоединение к сигналу newConnection().
Если msec равно -1, эта функция не будет зависать по тайм-ауту.
См. также hasPendingConnections() и nextPendingConnection().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.1/qtcpserver.html