QLocalServer Class
Die Klasse QLocalServer bietet einen lokalen Socket-basierten Server. Mehr...
Kopfzeile: | #include <QLocalServer> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
qmake: | QT += network |
Vererbt: | QObject |
Öffentliche Typen
enum | SocketOption { NoOptions, UserAccessOption, GroupAccessOption, OtherAccessOption, WorldAccessOption, AbstractNamespaceOption } |
flags | SocketOptions |
Eigenschaften
- socketOptions : SocketOptions
Öffentliche Funktionen
QLocalServer(QObject *parent = nullptr) | |
virtual | ~QLocalServer() |
QBindable<QLocalServer::SocketOptions> | bindableSocketOptions() |
void | close() |
QString | errorString() const |
QString | fullServerName() const |
virtual bool | hasPendingConnections() const |
bool | isListening() const |
bool | listen(const QString &name) |
bool | listen(qintptr socketDescriptor) |
(since 6.3) int | listenBacklogSize() const |
int | maxPendingConnections() const |
virtual QLocalSocket * | nextPendingConnection() |
QAbstractSocket::SocketError | serverError() const |
QString | serverName() const |
(since 6.3) void | setListenBacklogSize(int size) |
void | setMaxPendingConnections(int numConnections) |
void | setSocketOptions(QLocalServer::SocketOptions options) |
qintptr | socketDescriptor() const |
QLocalServer::SocketOptions | socketOptions() const |
bool | waitForNewConnection(int msec = 0, bool *timedOut = nullptr) |
Signale
void | newConnection() |
Statische öffentliche Mitglieder
bool | removeServer(const QString &name) |
Geschützte Funktionen
(since 6.8) void | addPendingConnection(QLocalSocket *socket) |
virtual void | incomingConnection(quintptr socketDescriptor) |
Detaillierte Beschreibung
Diese Klasse ermöglicht es, eingehende lokale Socket-Verbindungen zu akzeptieren.
Rufen Sie listen() auf, um den Server zu veranlassen, auf einer bestimmten Taste auf eingehende Verbindungen zu warten. Das Signal newConnection() wird dann jedes Mal ausgegeben, wenn sich ein Client mit dem Server verbindet.
Rufen Sie nextPendingConnection() auf, um die anstehende Verbindung als eine verbundene QLocalSocket zu akzeptieren. Die Funktion gibt einen Zeiger auf einen QLocalSocket zurück, der für die Kommunikation mit dem Client verwendet werden kann.
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, ist der Name, unter dem der Server lauscht, über serverName() verfügbar.
Der Aufruf von close() lässt QLocalServer aufhören, auf eingehende Verbindungen zu warten.
Obwohl QLocalServer 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 QLocalSocket und QTcpServer.
Dokumentation der Mitgliedstypen
enum QLocalServer::SocketOption
flags QLocalServer::SocketOptions
Diese Aufzählung beschreibt die möglichen Optionen, die zur Erstellung des Sockets verwendet werden können. Dies ändert die Zugriffsberechtigungen auf Plattformen (Linux, Windows), die Zugriffsberechtigungen auf den Socket unterstützen. Sowohl GroupAccess als auch OtherAccess können je nach Plattform leicht unterschiedliche Bedeutungen haben. Unter Linux und Android ist es möglich, Sockets mit abstrakten Adressen zu verwenden; Socket-Berechtigungen haben für solche Sockets keine Bedeutung.
Konstante | Wert | Beschreibung |
---|---|---|
QLocalServer::NoOptions | 0x0 | Es wurden keine Zugriffsbeschränkungen festgelegt. |
QLocalServer::UserAccessOption | 0x01 | Der Zugriff ist auf denselben Benutzer beschränkt wie der Prozess, der den Socket erstellt hat. |
QLocalServer::GroupAccessOption | 0x2 | Unter Linux ist der Zugriff auf dieselbe Gruppe beschränkt, aber nicht auf den Benutzer, der den Socket erstellt hat. Unter Windows ist der Zugriff auf die primäre Gruppe des Prozesses beschränkt. |
QLocalServer::OtherAccessOption | 0x4 | Unter Linux ist der Zugriff für alle außer dem Benutzer und der Gruppe, die den Socket erstellt hat, möglich. Unter Windows ist der Zugriff für jeden möglich. |
QLocalServer::WorldAccessOption | 0x7 | Keine Zugriffsbeschränkungen. |
QLocalServer::AbstractNamespaceOption | 0x8 | Der abhörende Socket wird im abstrakten Namespace erstellt. Dieses Flag ist spezifisch für Linux. Bei anderen Plattformen ist dieses Flag aus Gründen der Code-Portabilität gleichbedeutend mit WorldAccessOption. |
Der Typ SocketOptions ist ein Typedef für QFlags<SocketOption>. Er speichert eine ODER-Kombination von SocketOption-Werten.
Siehe auch socketOptions.
Dokumentation der Eigenschaften
[bindable]
socketOptions : SocketOptions
Hinweis: Diese Eigenschaft unterstützt QProperty Bindungen.
Diese Eigenschaft enthält die Socket-Optionen, die den Betrieb des Sockets steuern.
Beispielsweise kann der Socket den Zugriff darauf beschränken, welche Benutzerkennungen sich mit dem Socket verbinden können.
Diese Optionen müssen gesetzt werden, bevor listen() aufgerufen wird.
In einigen Fällen, z. B. bei Unix-Domain-Sockets unter Linux, wird der Zugriff auf den Socket durch die Dateisystemberechtigungen bestimmt und auf der Grundlage der umask erstellt. Das Setzen der Zugriffsflags setzt dies außer Kraft und schränkt den Zugriff wie angegeben ein oder erlaubt ihn.
Andere Unix-basierte Betriebssysteme wie macOS beachten keine Dateiberechtigungen für Unix-Domain-Sockets und haben standardmäßig WorldAccess, so dass diese Berechtigungsflags keine Wirkung haben.
Unter Windows reicht UserAccessOption aus, um einem Prozess ohne Berechtigungsstatus zu erlauben, sich mit einem lokalen Server zu verbinden, der von einem Prozess mit Berechtigungsstatus unter demselben Benutzer erstellt wurde. GroupAccessOption bezieht sich auf die primäre Gruppe des Prozesses (siehe TokenPrimaryGroup in der Windows-Dokumentation). OtherAccessOption bezieht sich auf die bekannte Gruppe "Everyone".
Auf Linux-Plattformen ist es möglich, einen Socket im abstrakten Namespace zu erstellen, der unabhängig vom Dateisystem ist. Die Verwendung dieser Art von Socket bedeutet, dass die Berechtigungsoptionen ignoriert werden. Auf anderen Plattformen ist AbstractNamespaceOption gleichbedeutend mit WorldAccessOption.
Standardmäßig ist keines der Flags gesetzt, die Zugriffsberechtigungen sind die Standardwerte der Plattform.
Siehe auch listen().
Dokumentation der Mitgliedsfunktionen
[explicit]
QLocalServer::QLocalServer(QObject *parent = nullptr)
Erstellt einen neuen lokalen Socket-Server mit dem angegebenen parent.
Siehe auch listen().
[virtual noexcept]
QLocalServer::~QLocalServer()
Zerstört das Objekt QLocalServer. Wenn der Server auf Verbindungen wartet, wird er automatisch geschlossen.
Alle Client QLocalSockets, die noch verbunden sind, müssen entweder die Verbindung trennen oder repariert werden, bevor der Server gelöscht wird.
Siehe auch close().
[protected, since 6.8]
void QLocalServer::addPendingConnection(QLocalSocket *socket)
Diese Funktion wird von QLocalServer::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 newConnection() aus, nachdem der Socket hinzugefügt wurde.
Diese Funktion wurde in Qt 6.8 eingeführt.
Siehe auch incomingConnection() und newConnection().
void QLocalServer::close()
Hören Sie auf, auf eingehende Verbindungen zu warten. Bestehende Verbindungen sind davon nicht betroffen, aber alle neuen Verbindungen werden abgelehnt.
Siehe auch isListening() und listen().
QString QLocalServer::errorString() const
Gibt die von Menschen lesbare Meldung zurück, die dem aktuellen Fehler entspricht, der von serverError() gemeldet wurde. Ist keine geeignete Zeichenkette verfügbar, wird eine leere Zeichenkette zurückgegeben.
Siehe auch serverError().
QString QLocalServer::fullServerName() const
Gibt den vollständigen Pfad zurück, unter dem der Server lauscht.
Hinweis: Dies ist plattformspezifisch.
Siehe auch listen() und serverName().
[virtual]
bool QLocalServer::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 QLocalServer::incomingConnection(quintptr socketDescriptor)
Diese virtuelle Funktion wird von QLocalServer aufgerufen, wenn eine neue Verbindung verfügbar ist. socketDescriptor ist der native Socket-Deskriptor für die akzeptierte Verbindung.
Die Basisimplementierung erstellt eine QLocalSocket, setzt den Socket-Deskriptor und speichert dann die QLocalSocket 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.
Siehe auch newConnection(), nextPendingConnection(), und QLocalSocket::setSocketDescriptor().
bool QLocalServer::isListening() const
Gibt true
zurück, wenn der Server auf eingehende Verbindungen wartet, andernfalls false.
Siehe auch listen() und close().
bool QLocalServer::listen(const QString &name)
Weist den Server an, auf name auf eingehende Verbindungen zu warten. Wenn der Server gerade lauscht, wird false zurückgegeben. Bei Erfolg wird true zurückgegeben, ansonsten false.
name kann ein einzelner Name sein und QLocalServer wird den korrekten plattformspezifischen Pfad ermitteln. serverName() gibt den Namen zurück, der in listen übergeben wurde.
Normalerweise würde man nur einen Namen wie "foo" übergeben, aber unter Unix könnte dies auch ein Pfad wie "/tmp/foo" sein und unter Windows könnte dies ein Pipe-Pfad wie "\\.\pipe\foo" sein.
Hinweis: Wenn der Server unter Unix abstürzt, ohne geschlossen zu werden, schlägt listen mit AddressInUseError fehl. Um einen neuen Server zu erstellen, sollte die Datei entfernt werden. Unter Windows können zwei lokale Server gleichzeitig auf dieselbe Pipe hören, aber alle Verbindungen gehen an einen der Server.
Siehe auch serverName(), isListening(), und close().
bool QLocalServer::listen(qintptr socketDescriptor)
Weist den Server an, auf socketDescriptor auf eingehende Verbindungen zu warten. Die Eigenschaft gibt false
zurück, wenn der Server gerade lauscht. Bei Erfolg gibt sie true
zurück, andernfalls false
. Der Socket muss bereit sein, neue Verbindungen anzunehmen, ohne dass zusätzliche plattformspezifische Funktionen aufgerufen werden. Der Socket wird in den nicht-blockierenden Modus versetzt.
serverName(), fullServerName() können eine Zeichenkette mit einem Namen zurückgeben, wenn diese Option von der Plattform unterstützt wird; andernfalls geben sie einen leeren QString zurück. Insbesondere die Adressen von Sockets im abstrakten Namensraum, der von Linux unterstützt wird, liefern keine nützlichen Namen, wenn sie nicht druckbare Zeichen enthalten.
Siehe auch isListening() und close().
[since 6.3]
int QLocalServer::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 QLocalServer::maxPendingConnections() const
Gibt die maximale Anzahl der anstehenden akzeptierten Verbindungen zurück. Der Standardwert ist 30.
Siehe auch setMaxPendingConnections() und hasPendingConnections().
[signal]
void QLocalServer::newConnection()
Dieses Signal wird jedes Mal ausgesendet, wenn eine neue Verbindung verfügbar ist.
Siehe auch hasPendingConnections() und nextPendingConnection().
[virtual]
QLocalSocket *QLocalServer::nextPendingConnection()
Gibt die nächste anstehende Verbindung als verbundenes QLocalSocket Objekt zurück.
Der Socket wird als Kind des Servers erstellt, was bedeutet, dass er automatisch gelöscht wird, wenn das QLocalServer 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.
Siehe auch hasPendingConnections(), newConnection(), und incomingConnection().
[static]
bool QLocalServer::removeServer(const QString &name)
Entfernt jede Serverinstanz, die einen Aufruf von listen() zum Scheitern bringen könnte, und gibt im Erfolgsfall true
zurück; andernfalls gibt sie false
zurück. Diese Funktion ist dazu gedacht, sich von einem Absturz zu erholen, wenn die vorherige Serverinstanz noch nicht bereinigt wurde.
Unter Windows bewirkt diese Funktion nichts; unter Unix entfernt sie die Socket-Datei, die durch name angegeben wird.
Warnung: Achten Sie darauf, dass Sie nicht die Sockets laufender Instanzen entfernen.
QAbstractSocket::SocketError QLocalServer::serverError() const
Gibt den Typ des zuletzt aufgetretenen Fehlers zurück oder NoError.
Siehe auch errorString().
QString QLocalServer::serverName() const
Gibt den Servernamen zurück, wenn der Server auf Verbindungen wartet; andernfalls wird QString() zurückgegeben.
Siehe auch listen() und fullServerName().
[since 6.3]
void QLocalServer::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 QLocalServer::setMaxPendingConnections(int numConnections)
Setzt die maximale Anzahl der anstehenden akzeptierten Verbindungen auf numConnections. QLocalServer wird nicht mehr als numConnections eingehende Verbindungen akzeptieren, bevor nextPendingConnection() aufgerufen wird.
Hinweis: Auch wenn QLocalServer keine neuen Verbindungen mehr annimmt, nachdem es seine maximale Anzahl an ausstehenden Verbindungen erreicht hat, kann das Betriebssystem diese noch in der Warteschlange halten, was dazu führt, dass Clients signalisieren, dass sie verbunden sind.
Siehe auch maxPendingConnections() und hasPendingConnections().
qintptr QLocalServer::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.
Der Typ des Deskriptors hängt von der Plattform ab:
- Unter Windows ist der zurückgegebene Wert ein Winsock 2 Socket Handle.
- Unter INTEGRITY ist der Rückgabewert der QTcpServer Socket Deskriptor und der Typ ist durch socketDescriptor definiert.
- Auf allen anderen UNIX-ähnlichen Betriebssystemen ist der Typ ein Dateideskriptor, der einen lauschenden Socket darstellt.
Siehe auch listen().
QLocalServer::SocketOptions QLocalServer::socketOptions() const
Gibt die Socket-Optionen zurück, die auf dem Socket eingestellt sind.
Hinweis: Getter-Funktion für die Eigenschaft socketOptions.
Siehe auch setSocketOptions().
bool QLocalServer::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, wird *timedOut auf true gesetzt.
Dies ist ein blockierender Funktionsaufruf. Seine Verwendung ist in einer Single-Thread-GUI-Anwendung nicht ratsam, da die gesamte Anwendung nicht mehr reagiert, bis die Funktion zurückkehrt. waitForNewConnection() ist hauptsächlich 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.