Класс 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) |
- 31 открытая функция, унаследованная от QObject
Сигналы
| void | ошибкаПринятия(QAbstractSocket::SocketError socketError) |
| void | новоеПодключение() |
- 2 сигнала, унаследованные от QObject
Статические открытые члены
| const QMetaObject | staticMetaObject |
- 9 статических открытых членов, унаследованных от QObject
Защищенные функции
| void | добавитьОжидающееПодключение(QTcpSocket *socket) |
| virtual void | входящееПодключение(qintptr socketDescriptor) |
- 9 защищенных функций, унаследованных от QObject
Дополнительные унаследованные члены
Подробное описание
Класс QTcpServer предоставляет сервер на основе протокола TCP.
Этот класс позволяет принимать входящие TCP-соединения. Вы можете указать порт или позволить QTcpServer выбрать его автоматически. Вы можете прослушивать конкретный адрес или все адреса машины.
Вызовите начатьПрослушивание(), чтобы сервер начал прослушивать входящие соединения. Затем сигнал новоеПодключение() генерируется каждый раз, когда клиент подключается к серверу.
Вызовите следующееОжидающееПодключение() для принятия ожидающего подключения как подключенного QTcpSocket. Функция возвращает указатель на QTcpSocket в состоянии QAbstractSocket::ConnectedState, который вы можете использовать для связи с клиентом.
Если произошла ошибка, ошибкаСервера() возвращает тип ошибки, а ошибкаСтрока() может быть вызвана для получения удобочитаемого описания произошедшего.
При прослушивании подключений адрес и порт, на которых сервер прослушивает, доступны как адресСервера() и портСервера().
Вызов закрыть() заставляет QTcpServer прекратить прослушивание входящих соединений.
Хотя QTcpServer в основном предназначен для использования с циклом событий, его можно использовать и без него. В этом случае вы должны использовать подождатьНовоеПодключение(), которое блокируется до тех пор, пока доступно соединение или не истечет время ожидания.
См. также QTcpSocket, Пример Fortune Server, Пример Threaded Fortune Server, Пример Loopback и Пример Torrent.
Документация по функциям-членам
[virtual] QTcpServer::QTcpServer(QObject *parent = 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()
Закрывает сервер. Сервер больше не будет прослушивать входящие подключения.
См. также начатьПрослушивание().
END_OF_DOCUMENT_MARKERQString QTcpServer::errorString() const
Возвращает удобочитаемое описание последней произошедшей ошибки.
См. также serverError().
[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 = 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.12/qtcpserver.html