Класс QTcpServer
Класс QTcpServer предоставляет сервер на основе протокола TCP. Подробнее...
| Заголовок: | #include <QTcpServer> |
| qmake: | QT += network |
| Наследует: | QObject |
| Наследует для: |
Примечание: Все функции в этом классе являются перевключёнными.
Открытые функции
| QTcpServer(QObject *parent = Q_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 = Q_NULLPTR) |
- 32 открытых функции унаследованы от QObject
Сигналы
| void | ошибкаПриёма(QAbstractSocket::SocketError socketError) |
| void | новоеПодключение() |
- 2 сигнала унаследованы от QObject
Защищённые функции
| void | добавитьОжидающееПодключение(QTcpSocket *socket) |
| virtual void | входящееПодключение(qintptr socketDescriptor) |
- 9 защищённых функций унаследованы от QObject
Дополнительные унаследованные члены
- 1 свойство унаследовано от QObject
- 1 открытый слот унаследован от QObject
- 11 статические открытые члены унаследованы от QObject
Подробное описание
Класс QTcpServer предоставляет сервер на основе протокола TCP.
Этот класс позволяет принимать входящие TCP-соединения. Вы можете указать порт или позволить QTcpServer выбрать его автоматически. Вы можете прослушивать определённый адрес или все адреса компьютера.
Вызовите прослушивать(), чтобы сервер прослушивал входящие соединения. Сигнал новоеПодключение() затем генерируется каждый раз, когда клиент подключается к серверу.
Вызовите следующееОжидаемоеПодключение(), чтобы принять ожидающее подключение как подключённый QTcpSocket. Функция возвращает указатель на QTcpSocket в состоянии QAbstractSocket::ConnectedState, который вы можете использовать для связи с клиентом.
Если произошла ошибка, ошибкаСервера() возвращает тип ошибки, а ошибкаСтрока() может быть вызвана, чтобы получить удобочитаемое описание произошедшего.
При прослушивании подключений адрес и порт, на которых прослушивает сервер, доступны как адресСервера() и портСервера().
Вызов закрыть() заставляет QTcpServer прекратить прослушивание входящих соединений.
Хотя QTcpServer в основном предназначен для использования с циклом событий, его можно использовать и без него. В этом случае вы должны использовать подождатьНовоеПодключение(), которое блокирует выполнение до тех пор, пока не будет доступно соединение или не истечёт время ожидания.
См. также QTcpSocket, Пример Fortune Server, Пример Threaded Fortune Server, Пример Loopback и Пример Torrent.
Документация по функциям-членам
QTcpServer::QTcpServer(QObject *parent = Q_NULLPTR)
Конструктор объекта QTcpServer.
parent передаётся в конструктор QObject.
См. также прослушивать() и установитьДескрипторСокета().
[virtual] QTcpServer::~QTcpServer()
Деструктор объекта QTcpServer. Если сервер прослушивает подключения, сокет автоматически закрывается.
Любые клиенты QTcpSocket, которые всё ещё подключены, должны либо отключиться, либо быть перепривязаны до удаления сервера.
См. также закрыть().
[signal] void QTcpServer::acceptError(QAbstractSocket::SocketError socketError)
Этот сигнал генерируется, когда приём нового подключения приводит к ошибке. Параметр socketError описывает тип произошедшей ошибки.
Эта функция была представлена в Qt 5.0.
См. также приостановитьПриём() и возобновитьПриём().
[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.
См. также nextPendingConnection() и setMaxPendingConnections().
[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().
[signal] void QTcpServer::newConnection()
Этот сигнал генерируется каждый раз, когда доступно новое подключение.
См. также hasPendingConnections() и nextPendingConnection().
[virtual] QTcpSocket *QTcpServer::nextPendingConnection()
Возвращает следующее ожидающее подключение в виде объекта QTcpSocket.
Сокет создаётся как дочерний элемент сервера, что означает его автоматическое удаление при уничтожении объекта QTcpServer. Тем не менее, рекомендуется явно удалять объект по завершении работы с ним, чтобы избежать потерь памяти.
Возвращает 0, если этот метод вызван при отсутствии ожидающих подключений.
Примечание: Возвращённый объект 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 = Q_NULLPTR)
Ожидает не более msec миллисекунд или до появления входящего подключения. Возвращает true , если подключение доступно; в противном случае возвращает false . Если операция завершилась по таймауту, и timedOut не равен 0, *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-5.9/qtcpserver.html