Класс 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, Пример Fortune Server, Пример Threaded Fortune Server, Пример Loopback и Пример Torrent.
Документация по функциям-членам
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.
Это блокирующий вызов функции. Его использование не рекомендуется в однопоточной GUI-приложении, так как всё приложение перестанет отвечать, пока функция не вернётся. 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.2/qtcpserver.html