Класс QTcpServer
Класс QTcpServer предоставляет сервер на основе TCP. Подробнее...
| Заголовок: | #include <QTcpServer> |
| 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] 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(), если не хотите нарушить механизм ожидающих соединений.
Эта функция была введена в Qt 4.7.
См. также входящее_соединение().
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().
void QTcpServer::pauseAccepting()
Приостанавливает принятие новых подключений. Очередные подключения останутся в очереди.
Этот метод был добавлен в Qt 5.0.
См. также resumeAccepting().
QNetworkProxy QTcpServer::proxy() const
Возвращает прокси-сервер для этого сокета. По умолчанию используется QNetworkProxy::DefaultProxy.
Этот метод был добавлен в Qt 4.1.
См. также setProxy() и QNetworkProxy.
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);
Этот метод был добавлен в Qt 4.1.
См. также 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-5.14/qtcpserver.html