Класс QTcpServer
Класс QTcpServer предоставляет серверную часть для протокола TCP. Подробнее...
| Заголовок: | #include <QTcpServer> |
| qmake: | QT += network |
| Наследует: | QObject |
| Наследует от: |
Примечание: Все функции в этом классе являются перевходовыми.
Открытые функции
| QTcpServer(QObject *parent = nullptr) | |
| virtual | ~QTcpServer() |
| void | close() |
| QString | errorString() const |
| virtual bool | hasPendingConnections() const |
| bool | isListening() const |
| bool | listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0) |
| int | maxPendingConnections() const |
| virtual QTcpSocket * | nextPendingConnection() |
| void | pauseAccepting() |
| QNetworkProxy | proxy() const |
| void | resumeAccepting() |
| QHostAddress | serverAddress() const |
| QAbstractSocket::SocketError | serverError() const |
| quint16 | serverPort() const |
| void | setMaxPendingConnections(int numConnections) |
| void | setProxy(const QNetworkProxy &networkProxy) |
| bool | setSocketDescriptor(qintptr socketDescriptor) |
| qintptr | socketDescriptor() const |
| bool | waitForNewConnection(int msec = 0, bool *timedOut = nullptr) |
- 34 открытых функций, унаследованных от QObject
Сигналы
| void | acceptError(QAbstractSocket::SocketError socketError) |
| void | newConnection() |
- 2 сигнала, унаследованных от QObject
Защищенные функции
| void | addPendingConnection(QTcpSocket *socket) |
| virtual void | incomingConnection(qintptr socketDescriptor) |
- 9 защищенных функций, унаследованных от QObject
Дополнительные унаследованные члены
- 1 свойство, унаследованное от QObject
- 1 открытый слот, унаследованный от QObject
- 1 открытая переменная, унаследованная от QObject
- 10 статических открытых членов, унаследованных от QObject
- 2 защищенных переменных, унаследованных от QObject
Подробное описание
Класс QTcpServer предоставляет серверную часть для протокола TCP.
Этот класс позволяет принимать входящие подключения TCP. Вы можете указать порт или позволить QTcpServer выбрать его автоматически. Вы можете прослушивать конкретный адрес или все адреса машины.
Вызовите listen(), чтобы сервер прослушивал входящие соединения. Сигнал newConnection() будет генерироваться каждый раз, когда клиент подключается к серверу.
Вызовите nextPendingConnection(), чтобы принять ожидающее соединение в качестве подключенного QTcpSocket. Функция возвращает указатель на QTcpSocket в состоянии QAbstractSocket::ConnectedState, который можно использовать для связи с клиентом.
Если произошла ошибка, serverError() возвращает тип ошибки, а errorString() можно вызвать для получения удобочитаемого описания произошедшего.
При прослушивании подключений адрес и порт, на которых прослушивается сервер, доступны как serverAddress() и serverPort().
Вызов close() заставляет QTcpServer прекратить прослушивание входящих подключений.
Хотя QTcpServer в основном предназначен для использования с циклом событий, его можно использовать и без него. В этом случае необходимо использовать waitForNewConnection(), который блокирует выполнение, пока либо соединение не станет доступным, либо не истечёт время ожидания.
См. также QTcpSocket, Пример сервера Fortune, Пример многопоточного сервера Fortune, Пример Loopback и Пример Torrent.
Документация по членам функций
QTcpServer::QTcpServer(QObject *parent = nullptr)
Конструирует объект QTcpServer.
parent передаётся конструктору QObject.
См. также listen() и setSocketDescriptor().
[virtual] QTcpServer::~QTcpServer()
Удаляет объект QTcpServer. Если сервер прослушивает подключения, сокет автоматически закрывается.
Любые клиентские сокеты QTcpSocket, которые всё ещё подключены, должны либо отключиться, либо быть перенаправлены родительскому элементу перед удалением сервера.
См. также close().
[signal] void QTcpServer::acceptError(QAbstractSocket::SocketError socketError)
Этот сигнал генерируется, когда приёме нового соединения происходит ошибка. Параметр socketError описывает тип возникшей ошибки.
Эта функция была введена в Qt 5.0.
См. также pauseAccepting() и resumeAccepting().
[protected] void QTcpServer::addPendingConnection(QTcpSocket *socket)
Эта функция вызывается QTcpServer::incomingConnection() для добавления socket в список ожидающих входящих подключений.
Примечание: Не забудьте вызвать этот член из переопределенного incomingConnection(), если вы не хотите нарушать механизм ожидающих подключений.
Эта функция была введена в Qt 4.7.
См. также incomingConnection().
void QTcpServer::close()
Закрывает сервер. Сервер больше не будет прослушивать входящие подключения.
См. также listen().
QString 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 может быть не пригоден для использования с функциями native сокетов и должен использоваться только с 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
Возвращает дескриптор native сокета, используемый сервером для прослушивания входящих запросов, или -1, если сервер не прослушивает.
Если сервер использует QNetworkProxy, возвращённый дескриптор может быть непригоден для использования с функциями native сокетов.
См. также 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/archives/qt-5.11/qtcpserver.html