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