QTcpServer Class

Die Klasse QTcpServer bietet einen TCP-basierten Server. Mehr...

Kopfzeile: #include <QTcpServer>
CMake: find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake: QT += network
Vererbt: QObject
Vererbt von:

QSctpServer und QSslServer

Hinweis: Alle Funktionen in 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)

Detaillierte Beschreibung

Diese Klasse ermöglicht es, eingehende TCP-Verbindungen anzunehmen. Sie können den Port angeben oder QTcpServer einen automatisch wählen lassen. Sie können auf eine bestimmte Adresse oder auf alle Adressen des Rechners hören.

Rufen Sie listen() auf, damit der Server auf eingehende Verbindungen wartet. Das Signal newConnection() wird dann jedes Mal ausgegeben, wenn sich ein Client mit dem Server verbindet. Wenn die Client-Verbindung mit der Funktion addPendingConnection() in die Warteschlange für anstehende Verbindungen aufgenommen wurde, wird das Signal pendingConnectionAvailable() ausgegeben.

Rufen Sie nextPendingConnection() auf, um die ausstehende Verbindung als eine verbundene QTcpSocket zu akzeptieren. Die Funktion gibt einen Zeiger auf ein QTcpSocket in QAbstractSocket::ConnectedState zurück, das Sie für die Kommunikation mit dem Client verwenden können.

Wenn ein Fehler auftritt, gibt serverError() die Art des Fehlers zurück, und errorString() kann aufgerufen werden, um eine von Menschen lesbare Beschreibung des Vorfalls zu erhalten.

Wenn auf Verbindungen gewartet wird, sind die Adresse und der Port, auf dem der Server lauscht, als serverAddress() und serverPort() verfügbar.

Der Aufruf von close() bewirkt, dass QTcpServer aufhört, auf eingehende Verbindungen zu warten.

Obwohl QTcpServer hauptsächlich für die Verwendung mit einer Ereignisschleife konzipiert ist, ist es möglich, ihn ohne eine solche zu verwenden. In diesem Fall müssen Sie waitForNewConnection() verwenden, das blockiert, bis entweder eine Verbindung verfügbar ist oder ein Timeout abläuft.

Siehe auch QTcpSocket, Fortune Server, Threaded Fortune Server, und Torrent Example.

Dokumentation der Mitgliedsfunktionen

[explicit] QTcpServer::QTcpServer(QObject *parent = nullptr)

Konstruiert ein QTcpServer Objekt.

parent wird an den QObject Konstruktor übergeben.

Siehe auch listen() und setSocketDescriptor().

[virtual noexcept] QTcpServer::~QTcpServer()

Zerstört das Objekt QTcpServer. Wenn der Server auf Verbindungen wartet, wird der Socket automatisch geschlossen.

Jeder Client QTcpSocket, der noch verbunden ist, muss entweder die Verbindung trennen oder repariert werden, bevor der Server gelöscht wird.

Siehe auch close().

[signal] void QTcpServer::acceptError(QAbstractSocket::SocketError socketError)

Dieses Signal wird ausgegeben, wenn beim Annehmen 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 socket in die Liste der anstehenden eingehenden Verbindungen aufzunehmen.

Hinweis: Vergessen Sie nicht, dieses Mitglied von der reimplementierten Funktion incomingConnection() aufzurufen, wenn Sie den Mechanismus der ausstehenden Verbindungen nicht unterbrechen wollen. Diese Funktion gibt das Signal pendingConnectionAvailable() aus, nachdem der Socket hinzugefügt worden ist.

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 menschenlesbare Beschreibung des letzten aufgetretenen Fehlers zurück.

Siehe auch serverError().

[virtual] bool QTcpServer::hasPendingConnections() const

Gibt true zurück, wenn der Server eine schwebende 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 eine QTcpSocket, setzt den Socket-Deskriptor und speichert dann die QTcpSocket in einer internen Liste ausstehender Verbindungen. Schließlich wird newConnection() ausgegeben.

Reimplementieren Sie diese Funktion, um das Verhalten des Servers zu ändern, wenn eine Verbindung verfügbar ist.

Wenn dieser Server QNetworkProxy verwendet, dann ist socketDescriptor möglicherweise nicht mit nativen Socket-Funktionen verwendbar und sollte nur mit QTcpSocket::setSocketDescriptor() verwendet werden.

Hinweis: Wenn bei der Neuimplementierung dieser Methode ein weiterer Socket erstellt wird, muss dieser durch den Aufruf von addPendingConnection() zum Mechanismus der ausstehenden Verbindungen hinzugefügt werden.

Hinweis: Wenn Sie eine eingehende Verbindung als neues QTcpSocket Objekt in einem anderen Thread behandeln wollen, müssen Sie socketDescriptor an den anderen Thread übergeben und dort das QTcpSocket Objekt erstellen und dessen setSocketDescriptor() Methode verwenden.

Siehe auch newConnection(), nextPendingConnection(), und addPendingConnection().

bool QTcpServer::isListening() const

Gibt true zurück, wenn der Server gerade auf eingehende Verbindungen wartet; andernfalls false.

Siehe auch listen().

bool QTcpServer::listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0)

Weist den Server an, auf eingehende Verbindungen an der Adresse address und dem Port port zu warten. Wenn port gleich 0 ist, wird automatisch ein Port gewählt. Wenn address gleich QHostAddress::Any ist, lauscht der Server an 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 Rückstandswarteschlange der zu akzeptierenden Verbindungen zurück.

Diese Funktion wurde in Qt 6.3 eingeführt.

Siehe auch setListenBacklogSize().

int QTcpServer::maxPendingConnections() const

Gibt die maximale Anzahl der anstehenden akzeptierten Verbindungen zurück. Der Standardwert ist 30.

Siehe auch setMaxPendingConnections() und hasPendingConnections().

[signal] void QTcpServer::newConnection()

Dieses Signal wird jedes Mal ausgegeben, wenn eine neue Verbindung verfügbar ist, unabhängig davon, ob sie der Warteschlange für anstehende Verbindungen hinzugefügt wurde oder nicht.

Siehe auch hasPendingConnections() und nextPendingConnection().

[virtual] QTcpSocket *QTcpServer::nextPendingConnection()

Gibt die nächste anstehende Verbindung als verbundenes QTcpSocket Objekt zurück.

Der Socket wird als Kind des Servers erstellt, was bedeutet, dass er automatisch gelöscht wird, wenn das QTcpServer Objekt zerstört wird. Es ist dennoch eine gute Idee, das Objekt explizit zu löschen, wenn Sie damit fertig sind, um Speicherverschwendung zu vermeiden.

nullptr wird zurückgegeben, wenn diese Funktion aufgerufen wird und keine Verbindungen anstehen.

Hinweis: Das zurückgegebene QTcpSocket Objekt kann nicht von einem anderen Thread aus verwendet werden. Wenn Sie eine eingehende Verbindung von einem anderen Thread verwenden wollen, müssen Sie incomingConnection() überschreiben.

Siehe auch hasPendingConnections().

void QTcpServer::pauseAccepting()

Pausiert die Annahme neuer Verbindungen. Verbindungen in der Warteschlange bleiben in der Warteschlange.

Siehe auch resumeAccepting().

[private signal, since 6.4] void QTcpServer::pendingConnectionAvailable()

Dieses Signal wird jedes Mal ausgegeben, wenn eine neue Verbindung in die Warteschlange der ausstehenden Verbindungen aufgenommen wurde.

Hinweis: Dies ist ein privates Signal. Es kann in Signalverbindungen verwendet werden, kann aber nicht vom Benutzer ausgegeben 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, wenn der Server 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)

Setzt die Größe der Warteschlange für zu akzeptierende Verbindungen auf size. Das Betriebssystem kann diesen Wert reduzieren oder ignorieren. Standardmäßig beträgt die Größe der Warteschlange 50.

Hinweis: Diese Eigenschaft muss vor dem Aufruf von listen() gesetzt werden.

Diese Funktion wurde in Qt 6.3 eingeführt.

Siehe auch listenBacklogSize().

void QTcpServer::setMaxPendingConnections(int numConnections)

Legt die maximale Anzahl der anstehenden akzeptierten Verbindungen auf numConnections fest. QTcpServer akzeptiert nicht mehr als numConnections eingehende Verbindungen, bevor nextPendingConnection() aufgerufen wird. Standardmäßig liegt die Grenze bei 30 ausstehenden Verbindungen.

Clients können sich noch verbinden, nachdem der Server die maximale Anzahl an ausstehenden Verbindungen erreicht hat (d.h. QTcpSocket kann immer noch das connected()-Signal ausgeben). QTcpServer nimmt keine neuen Verbindungen mehr an, aber das Betriebssystem kann sie noch in der Warteschlange halten.

Siehe auch maxPendingConnections() und hasPendingConnections().

void QTcpServer::setProxy(const QNetworkProxy &networkProxy)

Setzt den expliziten Netzwerk-Proxy für diesen Socket auf networkProxy.

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)

Setzt den Socket-Deskriptor, den dieser Server verwenden soll, wenn er auf eingehende Verbindungen zu socketDescriptor wartet. Gibt true zurück, wenn der Socket erfolgreich gesetzt wurde; andernfalls wird false zurückgegeben.

Es wird davon ausgegangen, dass sich der Socket im Lauschzustand befindet.

Siehe auch socketDescriptor() und isListening().

qintptr QTcpServer::socketDescriptor() const

Gibt den nativen Socket-Deskriptor zurück, den der Server verwendet, um auf eingehende Anweisungen zu warten, oder -1, wenn der Server nicht wartet.

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 lang oder bis eine eingehende Verbindung verfügbar ist. Gibt true zurück, wenn eine Verbindung verfügbar ist; andernfalls false. Wenn der Vorgang eine Zeitüberschreitung hatte und timedOut nicht nullptr ist, * wirdtimedOut auf true gesetzt.

Dies ist ein blockierender Funktionsaufruf. Seine Verwendung ist in einer Single-Thread-GUI-Anwendung nachteilig, 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 ist die Verbindung mit dem Signal newConnection().

Wenn msec -1 ist, wird diese Funktion nicht abgebrochen.

Siehe auch hasPendingConnections() und nextPendingConnection().

© 2025 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.