Класс 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.15/qtcpserver.html