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, Пример потокового сервера Fortune, Пример 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.13/qtcpserver.html