QTcpServer Class
Die Klasse „QTcpServer“ stellt einen TCP-basierten Server bereit. Mehr...
| Header: | #include <QTcpServer> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
| qmake: | QT += network |
| Erbt von: | QObject |
| Vererbt an: |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- QTcpServer ist Teil der Netzwerkprogrammier-API.
Hinweis: Alle Funktionen dieser Klasse sind reentrant.
Öffentliche Funktionen
| 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) |
(since 6.3) int | listenBacklogSize() const |
| int | maxPendingConnections() const |
| virtual QTcpSocket * | nextPendingConnection() |
| void | pauseAccepting() |
| QNetworkProxy | proxy() const |
| void | resumeAccepting() |
| QHostAddress | serverAddress() const |
| QAbstractSocket::SocketError | serverError() const |
| quint16 | serverPort() const |
(since 6.3) void | setListenBacklogSize(int size) |
| void | setMaxPendingConnections(int numConnections) |
| void | setProxy(const QNetworkProxy &networkProxy) |
| bool | setSocketDescriptor(qintptr socketDescriptor) |
| qintptr | socketDescriptor() const |
| bool | waitForNewConnection(int msec = 0, bool *timedOut = nullptr) |
Signale
| void | acceptError(QAbstractSocket::SocketError socketError) |
| void | newConnection() |
(since 6.4) void | pendingConnectionAvailable() |
Geschützte Funktionen
| void | addPendingConnection(QTcpSocket *socket) |
| virtual void | incomingConnection(qintptr socketDescriptor) |
Ausführliche Beschreibung
Diese Klasse ermöglicht es, eingehende TCP-Verbindungen anzunehmen. Sie können den Port angeben oder QTcpServer automatisch einen auswählen lassen. Sie können auf eine bestimmte Adresse oder auf alle Adressen des Rechners lauschen.
Rufen Sie ` listen()` auf, damit der Server auf eingehende Verbindungen wartet. Das Signal ` newConnection()` wird dann jedes Mal ausgelöst, wenn ein Client eine Verbindung zum Server herstellt. Wenn die Client-Verbindung mithilfe der Funktion ` addPendingConnection()` zur Warteschlange der ausstehenden Verbindungen hinzugefügt wurde, wird das Signal ` pendingConnectionAvailable()` ausgelöst.
Rufen Sie ` nextPendingConnection()` auf, um die ausstehende Verbindung als verbundene ` QTcpSocket` anzunehmen. Die Funktion gibt einen Zeiger auf eine ` QTcpSocket ` in ` QAbstractSocket::ConnectedState ` zurück, die Sie für die Kommunikation mit dem Client verwenden können.
Tritt ein Fehler auf, gibt ` serverError()` den Fehlertyp zurück, und mit ` errorString()` lässt sich eine für Menschen lesbare Beschreibung des Vorfalls abrufen.
Beim Abhören auf Verbindungen stehen die Adresse und der Port, auf denen der Server lauscht, über serverAddress() und serverPort() zur Verfügung.
Durch den Aufruf von ` close()` beendet `QTcpServer` das Abhören auf eingehende Verbindungen.
Obwohl QTcpServer hauptsächlich für die Verwendung mit einer Ereignisschleife konzipiert ist, ist es möglich, ihn auch ohne eine solche zu nutzen. In diesem Fall müssen Sie ` waitForNewConnection()` verwenden, das so lange blockiert, bis entweder eine Verbindung verfügbar ist oder ein Timeout abläuft.
Siehe auch „ QTcpSocket“ , „Fortune-Server“, „Threaded Fortune-Server“ und „Torrent-Beispiel“.
Dokumentation zu den Mitgliedsfunktionen
[explicit] QTcpServer::QTcpServer(QObject *parent = nullptr)
Erstellt ein QTcpServer-Objekt.
parent wird an den Konstruktor von ` QObject ` übergeben.
Siehe auch „ listen()“ und „ setSocketDescriptor()“.
[virtual noexcept] QTcpServer::~QTcpServer()
Löscht das Objekt „ QTcpServer “. Wenn der Server auf Verbindungen wartet, wird der Socket automatisch geschlossen.
Alle noch verbundenen Client- QTcpSockets müssen entweder die Verbindung trennen oder einem neuen Elternobjekt zugeordnet werden, bevor der Server gelöscht wird.
Siehe auch ` close()`.
[signal] void QTcpServer::acceptError(QAbstractSocket::SocketError socketError)
Dieses Signal wird ausgelöst, wenn beim Akzeptieren einer neuen Verbindung ein Fehler auftritt. Der Parameter „ socketError “ beschreibt die Art des aufgetretenen Fehlers.
Siehe auch „ pauseAccepting()“ und „ resumeAccepting()“.
[protected] void QTcpServer::addPendingConnection(QTcpSocket *socket)
Diese Funktion wird von ` QTcpServer::incomingConnection()` aufgerufen, um die ` socket ` zur Liste der ausstehenden eingehenden Verbindungen hinzuzufügen.
Hinweis: VergessenSie nicht , dieses Member aus der neu implementierten Funktion ` incomingConnection()` aufzurufen, wenn Sie den Mechanismus für ausstehende Verbindungen nicht unterbrechen möchten. Diese Funktion löst das Signal ` pendingConnectionAvailable()` aus, nachdem der Socket hinzugefügt wurde.
Siehe auch ` incomingConnection()` und ` pendingConnectionAvailable()`.
void QTcpServer::close()
Schließt den Server. Der Server wartet nicht mehr auf eingehende Verbindungen.
Siehe auch „ listen()“.
QString QTcpServer::errorString() const
Gibt eine für Menschen lesbare Beschreibung des zuletzt aufgetretenen Fehlers zurück.
Siehe auch ` serverError()`.
[virtual] bool QTcpServer::hasPendingConnections() const
Gibt „ true “ zurück, wenn der Server eine ausstehende Verbindung hat; andernfalls wird „ false “ zurückgegeben.
Siehe auch nextPendingConnection() und setMaxPendingConnections().
[virtual protected] void QTcpServer::incomingConnection(qintptr socketDescriptor)
Diese virtuelle Funktion wird von ` QTcpServer ` aufgerufen, wenn eine neue Verbindung verfügbar ist. Das Argument ` socketDescriptor ` ist der native Socket-Deskriptor für die akzeptierte Verbindung.
Die Basisimplementierung erstellt ein ` QTcpSocket`, legt den Socket-Deskriptor fest und speichert ` QTcpSocket ` anschließend in einer internen Liste ausstehender Verbindungen. Abschließend wird ` newConnection()` ausgelöst.
Implementieren Sie diese Funktion neu, um das Verhalten des Servers zu ändern, wenn eine Verbindung verfügbar ist.
Wenn dieser Server ` QNetworkProxy ` verwendet, ist der ` socketDescriptor ` möglicherweise nicht mit nativen Socket-Funktionen verwendbar und sollte ausschließlich mit ` QTcpSocket::setSocketDescriptor()` genutzt werden.
Hinweis: Wenn in der Neuimplementierung dieser Methode ein weiterer Socket erstellt wird, muss dieser durch Aufruf von ` addPendingConnection()` zum Mechanismus für ausstehende Verbindungen hinzugefügt werden.
Hinweis: Wenn Sie eine eingehende Verbindung als neues ` QTcpSocket `-Objekt in einem anderen Thread verarbeiten möchten, müssen Sie ` socketDescriptor ` an den anderen Thread übergeben, dort das ` QTcpSocket `-Objekt erstellen und dessen Methode ` setSocketDescriptor()` verwenden.
Siehe auch „ newConnection()“, „ nextPendingConnection()“ und „ addPendingConnection()“.
bool QTcpServer::isListening() const
Gibt „ true “ zurück, wenn der Server derzeit auf eingehende Verbindungen wartet; andernfalls wird „ false “ zurückgegeben.
Siehe auch listen().
bool QTcpServer::listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0)
Weist den Server an, auf eingehende Verbindungen unter der Adresse address und dem Port port zu warten. Ist port gleich 0, wird der Port automatisch ausgewählt. Ist address gleich QHostAddress::Any, wartet der Server auf allen Netzwerkschnittstellen.
Gibt bei Erfolg „ true “ zurück; andernfalls „ false “.
Siehe auch „ isListening()“.
[since 6.3] int QTcpServer::listenBacklogSize() const
Gibt die Größe der Backlog-Warteschlange der noch anzunehmenden Verbindungen zurück.
Diese Funktion wurde in Qt 6.3 eingeführt.
Siehe auch ` setListenBacklogSize()`.
int QTcpServer::maxPendingConnections() const
Gibt die maximale Anzahl ausstehender akzeptierter Verbindungen zurück. Der Standardwert beträgt 30.
Siehe auch setMaxPendingConnections() und hasPendingConnections().
[signal] void QTcpServer::newConnection()
Dieses Signal wird jedes Mal ausgelöst, wenn eine neue Verbindung verfügbar ist, unabhängig davon, ob diese in die Warteschlange der ausstehenden Verbindungen aufgenommen wurde oder nicht.
Siehe auch hasPendingConnections() und nextPendingConnection().
[virtual] QTcpSocket *QTcpServer::nextPendingConnection()
Gibt die nächste ausstehende Verbindung als verbundenes „ QTcpSocket “-Objekt zurück.
Der Socket wird als untergeordnetes Element des Servers erstellt, was bedeutet, dass er automatisch gelöscht wird, wenn das ` QTcpServer `-Objekt zerstört wird. Es ist dennoch ratsam, das Objekt explizit zu löschen, wenn Sie es nicht mehr benötigen, um Speicherplatzverschwendung zu vermeiden.
nullptr wird zurückgegeben, wenn diese Funktion aufgerufen wird, während keine ausstehenden Verbindungen vorhanden sind.
Hinweis: Das zurückgegebene ` QTcpSocket `-Objekt kann nicht von einem anderen Thread aus verwendet werden. Wenn Sie eine eingehende Verbindung von einem anderen Thread aus nutzen möchten, müssen Sie ` incomingConnection()` überschreiben.
Siehe auch ` hasPendingConnections()`.
void QTcpServer::pauseAccepting()
Die Annahme neuer Verbindungen wird unterbrochen. Verbindungen in der Warteschlange verbleiben dort.
Siehe auch resumeAccepting().
[private signal, since 6.4] void QTcpServer::pendingConnectionAvailable()
Dieses Signal wird jedes Mal ausgelöst, wenn eine neue Verbindung zur Warteschlange der ausstehenden Verbindungen hinzugefügt wurde.
Hinweis: Dies ist ein privates Signal. Es kann in Signalverbindungen verwendet werden, kann jedoch nicht vom Benutzer ausgelöst werden.
Diese Funktion wurde in Qt 6.4 eingeführt.
Siehe auch „ hasPendingConnections()“ und „ nextPendingConnection()“.
QNetworkProxy QTcpServer::proxy() const
Gibt den Netzwerk-Proxy für diesen Socket zurück. Standardmäßig wird QNetworkProxy::DefaultProxy verwendet.
Siehe auch setProxy() und QNetworkProxy.
void QTcpServer::resumeAccepting()
Nimmt wieder neue Verbindungen an.
Siehe auch pauseAccepting().
QHostAddress QTcpServer::serverAddress() const
Gibt die Adresse des Servers zurück, sofern dieser auf Verbindungen wartet; andernfalls wird „ QHostAddress::Null “ zurückgegeben.
Siehe auch serverPort() und listen().
QAbstractSocket::SocketError QTcpServer::serverError() const
Gibt einen Fehlercode für den zuletzt aufgetretenen Fehler zurück.
Siehe auch „ errorString()“.
quint16 QTcpServer::serverPort() const
Gibt den Port des Servers zurück, wenn der Server auf Verbindungen wartet; andernfalls wird 0 zurückgegeben.
Siehe auch serverAddress() und listen().
[since 6.3] void QTcpServer::setListenBacklogSize(int size)
Legt die Größe der Backlog-Warteschlange für anzunehmende Verbindungen auf „ size “ fest. Das Betriebssystem kann diesen Wert möglicherweise reduzieren oder ignorieren. Standardmäßig beträgt die Warteschlangengröße 50.
Hinweis: Diese Eigenschaft muss vor dem Aufruf von ` listen()` festgelegt werden.
Diese Funktion wurde in Qt 6.3 eingeführt.
Siehe auch ` listenBacklogSize()`.
void QTcpServer::setMaxPendingConnections(int numConnections)
Legt die maximale Anzahl an ausstehenden akzeptierten Verbindungen auf „ numConnections “ fest. „ QTcpServer “ akzeptiert nicht mehr als „ numConnections “ eingehende Verbindungen, bevor „ nextPendingConnection()“ aufgerufen wird. Standardmäßig beträgt das Limit 30 ausstehende Verbindungen.
Clients können möglicherweise weiterhin eine Verbindung herstellen, nachdem der Server seine maximale Anzahl an ausstehenden Verbindungen erreicht hat (d. h., QTcpSocket kann weiterhin das Signal connected() ausgeben). QTcpServer akzeptiert keine neuen Verbindungen mehr, aber das Betriebssystem behält diese möglicherweise weiterhin in der Warteschlange.
Siehe auch ` maxPendingConnections()` und ` hasPendingConnections()`.
void QTcpServer::setProxy(const QNetworkProxy &networkProxy)
Legt den expliziten Netzwerk-Proxy für diesen Socket auf „ networkProxy “ fest.
Um die Verwendung eines Proxys für diesen Socket zu deaktivieren, verwenden Sie den Proxy-Typ „ QNetworkProxy::NoProxy “:
server->setProxy(QNetworkProxy::NoProxy);Siehe auch proxy() und QNetworkProxy.
bool QTcpServer::setSocketDescriptor(qintptr socketDescriptor)
Legt den Socket-Deskriptor fest, den dieser Server beim Abhören auf eingehende Verbindungen zu socketDescriptor verwenden soll. Gibt „ true “ zurück, wenn der Socket erfolgreich eingerichtet wurde; andernfalls wird „ false “ zurückgegeben.
Es wird davon ausgegangen, dass sich der Socket im Listening-Zustand befindet.
Siehe auch socketDescriptor() und isListening().
qintptr QTcpServer::socketDescriptor() const
Gibt den nativen Socket-Deskriptor zurück, den der Server zum Abhören eingehender Befehle verwendet, oder -1, wenn der Server nicht im Abhörmodus ist.
Wenn der Server ` QNetworkProxy` verwendet, ist der zurückgegebene Deskriptor möglicherweise nicht mit nativen Socket-Funktionen verwendbar.
Siehe auch ` setSocketDescriptor()` und ` isListening()`.
bool QTcpServer::waitForNewConnection(int msec = 0, bool *timedOut = nullptr)
Wartet höchstens msec Millisekunden oder so lange, bis eine eingehende Verbindung verfügbar ist. Gibt „ true “ zurück, wenn eine Verbindung verfügbar ist; andernfalls wird „ false “ zurückgegeben. Wenn die Operation aufgrund einer Zeitüberschreitung abgebrochen wurde und „ timedOut “ nicht „ nullptr “ ist, wird *timedOut auf „true“ gesetzt.
Dies ist ein blockierender Funktionsaufruf. Von seiner Verwendung in einer Single-Thread-GUI-Anwendung wird abgeraten, da die gesamte Anwendung nicht mehr reagiert, bis die Funktion zurückkehrt. waitForNewConnection() ist vor allem dann nützlich, wenn keine Ereignisschleife verfügbar ist.
Die nicht blockierende Alternative besteht darin, sich an das Signal „ newConnection()“ anzuschließen.
Ist msec gleich -1, läuft diese Funktion ohne Zeitlimit ab.
Siehe auch ` hasPendingConnections()` und ` nextPendingConnection()`.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.