QAbstractSocket Class
Die Klasse `QAbstractSocket` stellt die Basisfunktionalität bereit, die allen Socket-Typen gemeinsam ist. Mehr...
| Header: | #include <QAbstractSocket> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
| qmake: | QT += network |
| Erbt von: | QIODevice |
| Vererbt an: | QTcpSocket und QUdpSocket |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- QAbstractSocket ist Teil der Netzwerkprogrammier-API.
Hinweis: Alle Funktionen dieser Klasse sind reentrant.
Öffentliche Typen
| enum | BindFlag { ShareAddress, DontShareAddress, ReuseAddressHint, DefaultForPlatform } |
| flags | BindMode |
| enum | NetworkLayerProtocol { IPv4Protocol, IPv6Protocol, AnyIPProtocol, UnknownNetworkLayerProtocol } |
| enum | PauseMode { PauseNever, PauseOnSslErrors } |
| flags | PauseModes |
| enum | SocketError { ConnectionRefusedError, RemoteHostClosedError, HostNotFoundError, SocketAccessError, SocketResourceError, …, UnknownSocketError } |
| enum | SocketOption { LowDelayOption, KeepAliveOption, MulticastTtlOption, MulticastLoopbackOption, TypeOfServiceOption, …, KeepAliveCountOption } |
| enum | SocketState { UnconnectedState, HostLookupState, ConnectingState, ConnectedState, BoundState, …, ListeningState } |
| enum | SocketType { TcpSocket, UdpSocket, SctpSocket, UnknownSocketType } |
Öffentliche Funktionen
| QAbstractSocket(QAbstractSocket::SocketType socketType, QObject *parent) | |
| virtual | ~QAbstractSocket() |
| void | abort() |
| virtual bool | bind(const QHostAddress &address, quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform) |
| bool | bind(quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform) |
(since 6.2) bool | bind(QHostAddress::SpecialAddress addr, quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform) |
| virtual void | connectToHost(const QString &hostName, quint16 port, QIODeviceBase::OpenMode openMode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol) |
| void | connectToHost(const QHostAddress &address, quint16 port, QIODeviceBase::OpenMode openMode = ReadWrite) |
| virtual void | disconnectFromHost() |
| QAbstractSocket::SocketError | error() const |
| bool | flush() |
| bool | isValid() const |
| QHostAddress | localAddress() const |
| quint16 | localPort() const |
| QAbstractSocket::PauseModes | pauseMode() const |
| QHostAddress | peerAddress() const |
| QString | peerName() const |
| quint16 | peerPort() const |
| QString | protocolTag() const |
| QNetworkProxy | proxy() const |
| qint64 | readBufferSize() const |
| virtual void | resume() |
| void | setPauseMode(QAbstractSocket::PauseModes pauseMode) |
| void | setProtocolTag(const QString &tag) |
| void | setProxy(const QNetworkProxy &networkProxy) |
| virtual void | setReadBufferSize(qint64 size) |
| virtual bool | setSocketDescriptor(qintptr socketDescriptor, QAbstractSocket::SocketState socketState = ConnectedState, QIODeviceBase::OpenMode openMode = ReadWrite) |
| virtual void | setSocketOption(QAbstractSocket::SocketOption option, const QVariant &value) |
| virtual qintptr | socketDescriptor() const |
| virtual QVariant | socketOption(QAbstractSocket::SocketOption option) |
| QAbstractSocket::SocketType | socketType() const |
| QAbstractSocket::SocketState | state() const |
| virtual bool | waitForConnected(int msecs = 30000) |
| virtual bool | waitForDisconnected(int msecs = 30000) |
Neu implementierte öffentliche Funktionen
| virtual qint64 | bytesAvailable() const override |
| virtual qint64 | bytesToWrite() const override |
| virtual void | close() override |
| virtual bool | isSequential() const override |
| virtual bool | waitForBytesWritten(int msecs = 30000) override |
| virtual bool | waitForReadyRead(int msecs = 30000) override |
Signale
| void | connected() |
| void | disconnected() |
| void | errorOccurred(QAbstractSocket::SocketError socketError) |
| void | hostFound() |
| void | proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator) |
| void | stateChanged(QAbstractSocket::SocketState socketState) |
Geschützte Funktionen
| void | setLocalAddress(const QHostAddress &address) |
| void | setLocalPort(quint16 port) |
| void | setPeerAddress(const QHostAddress &address) |
| void | setPeerName(const QString &name) |
| void | setPeerPort(quint16 port) |
| void | setSocketError(QAbstractSocket::SocketError socketError) |
| void | setSocketState(QAbstractSocket::SocketState state) |
Neu implementierte geschützte Funktionen
| virtual qint64 | readData(char *data, qint64 maxSize) override |
| virtual qint64 | readLineData(char *data, qint64 maxlen) override |
| virtual qint64 | skipData(qint64 maxSize) override |
| virtual qint64 | writeData(const char *data, qint64 size) override |
Ausführliche Beschreibung
QAbstractSocket ist die Basisklasse für QTcpSocket und QUdpSocket und enthält alle gemeinsamen Funktionen dieser beiden Klassen. Wenn Sie einen Socket benötigen, haben Sie zwei Möglichkeiten:
- QTcpSocket oder QUdpSocket instanziieren.
- Erstellen Sie einen nativen Socket-Deskriptor, instanziieren Sie `QAbstractSocket` und rufen Sie ` setSocketDescriptor()` auf, um den nativen Socket zu verpacken.
TCP (Transmission Control Protocol) ist ein zuverlässiges, stromorientiertes und verbindungsorientiertes Transportprotokoll. UDP (User Datagram Protocol) ist ein unzuverlässiges, datagrammorientiertes, verbindungsloses Protokoll. In der Praxis bedeutet dies, dass TCP besser für die kontinuierliche Datenübertragung geeignet ist, während das schlankere UDP verwendet werden kann, wenn Zuverlässigkeit keine Rolle spielt.
Die API von `QAbstractSocket` gleicht die meisten Unterschiede zwischen den beiden Protokollen aus. Obwohl UDP beispielsweise verbindungslos ist, baut ` connectToHost()` eine virtuelle Verbindung für UDP-Sockets auf, sodass Sie `QAbstractSocket` unabhängig vom zugrunde liegenden Protokoll mehr oder weniger auf dieselbe Weise verwenden können. Intern speichert `QAbstractSocket` die an ` connectToHost()` übergebenen Adresse und den Port, und Funktionen wie ` read()` und ` write()` verwenden diese Werte.
Zu jedem Zeitpunkt befindet sich QAbstractSocket in einem bestimmten Zustand (der von ` state()` zurückgegeben wird). Der Ausgangszustand ist ` UnconnectedState`. Nach dem Aufruf von ` connectToHost()` wechselt der Socket zunächst in den Zustand ` HostLookupState`. Wird der Host gefunden, wechselt QAbstractSocket in den Zustand ` ConnectingState ` und sendet das Signal ` hostFound()`. Sobald die Verbindung hergestellt ist, wechselt er in den Zustand „ ConnectedState “ und sendet das Signal „ connected()“. Tritt zu irgendeinem Zeitpunkt ein Fehler auf, wird das Signal „ errorOccurred()“ gesendet. Bei jeder Zustandsänderung wird das Signal „ stateChanged()“ gesendet. Der Einfachheit halber gibt „ isValid()“ den Wert „ true “ zurück, wenn der Socket zum Lesen und Schreiben bereit ist. Beachten Sie jedoch, dass sich der Socket im Zustand „ ConnectedState “ befinden muss, bevor Lese- und Schreibvorgänge stattfinden können.
Lesen oder schreiben Sie Daten, indem Sie ` read()` oder ` write()` aufrufen, oder verwenden Sie die Komfortfunktionen ` readLine()` und ` readAll()`. `QAbstractSocket` erbt außerdem ` getChar()`, ` putChar()` und ` ungetChar()` von ` QIODevice`, die mit einzelnen Bytes arbeiten. Das Signal ` bytesWritten()` wird ausgelöst, wenn Daten in den Socket geschrieben wurden. Beachten Sie, dass Qt die Größe des Schreibpuffers nicht begrenzt. Sie können dessen Größe überwachen, indem Sie auf dieses Signal abhören.
Das Signal „ readyRead()“ wird jedes Mal ausgelöst, wenn ein neuer Datenblock eingetroffen ist. „ bytesAvailable()“ gibt dann die Anzahl der Bytes zurück, die zum Lesen verfügbar sind. In der Regel würdest du das Signal „ readyRead()“ mit einem Slot verbinden und dort alle verfügbaren Daten lesen. Wenn Sie nicht alle Daten auf einmal lesen, stehen die verbleibenden Daten später weiterhin zur Verfügung, und alle neu eingehenden Daten werden an den internen Lesepuffer von `QAbstractSocket` angehängt. Um die Größe des Lesepuffers zu begrenzen, rufen Sie ` setReadBufferSize()` auf.
Um den Socket zu schließen, rufen Sie ` disconnectFromHost()` auf. `QAbstractSocket` wechselt in den Zustand „ QAbstractSocket::ClosingState “. Nachdem alle noch ausstehenden Daten in den Socket geschrieben wurden, schließt `QAbstractSocket` den Socket tatsächlich, wechselt in den Zustand „ QAbstractSocket::UnconnectedState “ und gibt ` disconnected()` aus. Wenn Sie eine Verbindung sofort abbrechen und dabei alle ausstehenden Daten verwerfen möchten, rufen Sie stattdessen ` abort()` auf. Wenn der Remote-Host die Verbindung schließt, sendet `QAbstractSocket` das Signal ` errorOccurred` (`QAbstractSocket::RemoteHostClosedError`), währenddessen der Socket-Zustand weiterhin ` ConnectedState` ist; anschließend wird das Signal ` disconnected()` ausgelöst.
Der Port und die Adresse des verbundenen Peers werden durch Aufruf von „ peerPort()“ und „ peerAddress()“ abgerufen. „ peerName()“ gibt den Hostnamen des Peers zurück, wie er an „ connectToHost()“ übergeben wurde. „ localPort()“ und „ localAddress()“ geben den Port und die Adresse des lokalen Sockets zurück.
QAbstractSocket stellt eine Reihe von Funktionen bereit, die den aufrufenden Thread anhalten, bis bestimmte Signale ausgelöst werden. Diese Funktionen können zur Implementierung blockierender Sockets verwendet werden:
- waitForConnected() blockiert, bis eine Verbindung hergestellt wurde.
- waitForReadyRead() blockiert, bis neue Daten zum Lesen verfügbar sind.
- waitForBytesWritten() blockiert, bis eine Datenladung in den Socket geschrieben wurde.
- waitForDisconnected() blockiert, bis die Verbindung geschlossen wurde.
Hier ein Beispiel:
int numRead = 0, numReadTotal = 0;
char buffer[50];
forever {
numRead = socket.read(buffer, 50);
// do whatever with array
numReadTotal += numRead;
if (numRead == 0 && !socket.waitForReadyRead())
break;
}Wenn „ waitForReadyRead()“ den Wert „ false “ zurückgibt, wurde die Verbindung geschlossen oder es ist ein Fehler aufgetreten.
Die Programmierung mit einem blockierenden Socket unterscheidet sich grundlegend von der Programmierung mit einem nicht-blockierenden Socket. Ein blockierender Socket erfordert keine Ereignisschleife und führt in der Regel zu einfacherem Code. In einer GUI-Anwendung sollten blockierende Sockets jedoch nur in Nicht-GUI-Threads verwendet werden, um ein Einfrieren der Benutzeroberfläche zu vermeiden. Einen Überblick über beide Ansätze bieten die Beispiele „fortuneclient “ und „blockingfortuneclient “.
Hinweis: Wir raten von der Verwendung der blockierenden Funktionen in Verbindung mit Signalen ab. Es sollte eine der beiden Möglichkeiten genutzt werden.
QAbstractSocket kann mit den Stream-Operatoren von QTextStream und QDataStream(operator<<() und operator>>()) verwendet werden. Dabei ist jedoch ein Punkt zu beachten: Sie müssen sicherstellen, dass genügend Daten verfügbar sind, bevor Sie versuchen, diese mit operator>>() zu lesen.
Siehe auch QNetworkAccessManager und QTcpServer.
Dokumentation zu Mitgliedstypen
enum QAbstractSocket::BindFlag
flags QAbstractSocket::BindMode
Diese Enumeration beschreibt die verschiedenen Flags, die Sie übergeben können, um das Verhalten von ` QAbstractSocket::bind()` zu ändern.
| Konstante | Wert | Beschreibung |
|---|---|---|
QAbstractSocket::ShareAddress | 0x1 | Erlaubt anderen Diensten, sich an dieselbe Adresse und denselben Port zu binden. Dies ist nützlich, wenn mehrere Prozesse die Last eines einzelnen Dienstes teilen, indem sie auf dieselbe Adresse und denselben Port hören (z. B. kann ein Webserver mit mehreren vorab geforkten Listenern die Antwortzeit erheblich verbessern). Da jedoch jeder Dienst ein Rebind durchführen darf, sind bei dieser Option bestimmte Sicherheitsaspekte zu beachten. Beachten Sie, dass Sie durch die Kombination dieser Option mit `ReuseAddressHint` Ihrem Dienst auch erlauben, ein Rebind auf eine bereits gemeinsam genutzte Adresse durchzuführen. Unter Unix entspricht dies der Socket-Option `SO_REUSEADDR`. Unter Windows ist dies das Standardverhalten, daher wird diese Option ignoriert. |
QAbstractSocket::DontShareAddress | 0x2 | Binde die Adresse und den Port exklusiv, sodass kein anderer Dienst ein Rebind durchführen darf. Durch die Übergabe dieser Option an ` QAbstractSocket::bind()` wird garantiert, dass bei Erfolg dein Dienst der einzige ist, der auf die Adresse und den Port lauscht. Kein Dienst darf ein Rebind durchführen, selbst wenn er `ReuseAddressHint` übergibt. Diese Option bietet mehr Sicherheit als „ShareAddress“, erfordert jedoch auf bestimmten Betriebssystemen, dass der Server mit Administratorrechten ausgeführt wird. Unter Unix und macOS ist das Nicht-Teilen das Standardverhalten beim Binden einer Adresse und eines Ports, daher wird diese Option ignoriert. Unter Windows verwendet diese Option die Socket-Option „SO_EXCLUSIVEADDRUSE“. |
QAbstractSocket::ReuseAddressHint | 0x4 | Gibt „ QAbstractSocket “ den Hinweis, dass versucht werden soll, den Dienst neu zu binden, selbst wenn die Adresse und der Port bereits von einem anderen Socket gebunden sind. Unter Windows und Unix entspricht dies der Socket-Option „SO_REUSEADDR“. |
QAbstractSocket::DefaultForPlatform | 0x0 | Die Standardoption für die aktuelle Plattform. Unter Unix und macOS entspricht dies (DontShareAddress + ReuseAddressHint), unter Windows entspricht es ShareAddress. |
Der Typ `BindMode` ist ein `typedef` für ` QFlags<BindFlag>`. Er speichert eine ODER-Kombination von `BindFlag`-Werten.
enum QAbstractSocket::NetworkLayerProtocol
Diese Enumeration beschreibt die in Qt verwendeten Werte für Protokolle der Netzwerkschicht.
| Konstante | Wert | Beschreibung |
|---|---|---|
QAbstractSocket::IPv4Protocol | 0 | IPv4 |
QAbstractSocket::IPv6Protocol | 1 | IPv6 |
QAbstractSocket::AnyIPProtocol | 2 | Entweder IPv4 oder IPv6 |
QAbstractSocket::UnknownNetworkLayerProtocol | -1 | Andere als IPv4 und IPv6 |
Siehe auch „ QHostAddress::protocol“ ().
enum QAbstractSocket::PauseMode
flags QAbstractSocket::PauseModes
Diese Enumeration beschreibt, wann der Socket die Datenübertragung unterbrechen soll. Derzeit wird ausschließlich die Benachrichtigung „ QSslSocket::sslErrors()“ unterstützt.
| Konstante | Wert | Beschreibung |
|---|---|---|
QAbstractSocket::PauseNever | 0x0 | Die Datenübertragung über den Socket wird nicht unterbrochen. Dies ist die Standardeinstellung und entspricht dem Verhalten von Qt 4. |
QAbstractSocket::PauseOnSslErrors | 0x1 | Die Datenübertragung auf dem Socket wird bei Empfang einer SSL-Fehlerbenachrichtigung angehalten, d. h. bei „ QSslSocket::sslErrors()“. |
Der Typ `PauseModes` ist ein `typedef` für ` QFlags<PauseMode>`. Er speichert eine ODER-Verknüpfung von `PauseMode`-Werten.
enum QAbstractSocket::SocketError
Diese Enumeration beschreibt die Socket-Fehler, die auftreten können.
| Konstante | Wert | Beschreibung |
|---|---|---|
QAbstractSocket::ConnectionRefusedError | 0 | Die Verbindung wurde vom Gegenüber abgelehnt (oder es ist eine Zeitüberschreitung aufgetreten). |
QAbstractSocket::RemoteHostClosedError | 1 | Der Remote-Host hat die Verbindung geschlossen. Beachten Sie, dass der Client-Socket (d. h. dieser Socket) geschlossen wird, nachdem die Benachrichtigung über das Schließen durch den Remote-Host gesendet wurde. |
QAbstractSocket::HostNotFoundError | 2 | Die Host-Adresse wurde nicht gefunden. |
QAbstractSocket::SocketAccessError | 3 | Der Socket-Vorgang schlug fehl, da der Anwendung die erforderlichen Berechtigungen fehlten. |
QAbstractSocket::SocketResourceError | 4 | Dem lokalen System gingen die Ressourcen aus (z. B. zu viele Sockets). |
QAbstractSocket::SocketTimeoutError | 5 | Die Socket-Operation ist abgelaufen. |
QAbstractSocket::DatagramTooLargeError | 6 | Das Datagramm war größer als das vom Betriebssystem festgelegte Limit (das bis zu 8192 Byte betragen kann). |
QAbstractSocket::NetworkError | 7 | Es ist ein Netzwerkfehler aufgetreten (z. B. wurde das Netzwerkkabel versehentlich abgezogen). |
QAbstractSocket::AddressInUseError | 8 | Die in ` QAbstractSocket::bind()` angegebene Adresse ist bereits belegt und wurde als exklusiv festgelegt. |
QAbstractSocket::SocketAddressNotAvailableError | 9 | Die in ` QAbstractSocket::bind()` angegebene Adresse gehört nicht zum Host. |
QAbstractSocket::UnsupportedSocketOperationError | 10 | Die angeforderte Socket-Operation wird vom lokalen Betriebssystem nicht unterstützt (z. B. fehlende IPv6-Unterstützung). |
QAbstractSocket::ProxyAuthenticationRequiredError | 12 | Der Socket nutzt einen Proxy, und der Proxy erfordert eine Authentifizierung. |
QAbstractSocket::SslHandshakeFailedError | 13 | Der SSL/TLS-Handshake ist fehlgeschlagen, daher wurde die Verbindung geschlossen (wird nur in ` QSslSocket` verwendet) |
QAbstractSocket::UnfinishedSocketOperationError | 11 | Wird nur von `QAbstractSocketEngine` verwendet. Die zuletzt versuchte Operation ist noch nicht abgeschlossen (läuft im Hintergrund noch). |
QAbstractSocket::ProxyConnectionRefusedError | 14 | Der Proxy-Server konnte nicht kontaktiert werden, da die Verbindung zu diesem Server verweigert wurde. |
QAbstractSocket::ProxyConnectionClosedError | 15 | Die Verbindung zum Proxy-Server wurde unerwartet geschlossen (bevor die Verbindung zum endgültigen Peer hergestellt wurde). |
QAbstractSocket::ProxyConnectionTimeoutError | 16 | Die Verbindung zum Proxy-Server ist abgelaufen oder der Proxy-Server hat während der Authentifizierungsphase nicht mehr geantwortet. |
QAbstractSocket::ProxyNotFoundError | 17 | Die mit ` setProxy()` festgelegte Proxy-Adresse (oder der Anwendungs-Proxy) wurde nicht gefunden. |
QAbstractSocket::ProxyProtocolError | 18 | Die Verbindungsverhandlung mit dem Proxy-Server ist fehlgeschlagen, da die Antwort des Proxy-Servers nicht verstanden werden konnte. |
QAbstractSocket::OperationError | 19 | Es wurde eine Operation versucht, während sich der Socket in einem Zustand befand, der dies nicht zuließ. |
QAbstractSocket::SslInternalError | 20 | Die verwendete SSL-Bibliothek hat einen internen Fehler gemeldet. Dies ist wahrscheinlich auf eine fehlerhafte Installation oder Konfiguration der Bibliothek zurückzuführen. |
QAbstractSocket::SslInvalidUserDataError | 21 | Es wurden ungültige Daten (Zertifikat, Schlüssel, Verschlüsselungsalgorithmus usw.) bereitgestellt, deren Verwendung zu einem Fehler in der SSL-Bibliothek führte. |
QAbstractSocket::TemporaryError | 22 | Es ist ein vorübergehender Fehler aufgetreten (z. B. würde der Vorgang blockieren, der Socket ist jedoch nicht blockierend). |
QAbstractSocket::UnknownSocketError | -1 | Es ist ein nicht identifizierter Fehler aufgetreten. |
Siehe auch QAbstractSocket::error() und QAbstractSocket::errorOccurred().
enum QAbstractSocket::SocketOption
Diese Enumeration stellt die Optionen dar, die für einen Socket festgelegt werden können. Auf Wunsch können diese Optionen festgelegt werden, nachdem das Signal „ connected()“ vom Socket empfangen wurde oder nachdem ein neuer Socket über „ QTcpServer “ erhalten wurde.
| Konstante | Wert | Beschreibung |
|---|---|---|
QAbstractSocket::LowDelayOption | 0 | Versucht, den Socket für geringe Latenz zu optimieren. Bei einem „ QTcpSocket “ würde dies die Option `TCP_NODELAY` setzen und den Nagle-Algorithmus deaktivieren. Setzen Sie diesen Wert auf 1, um die Option zu aktivieren. |
QAbstractSocket::KeepAliveOption | 1 | Setzen Sie diesen Wert auf 1, um die Socket-Option `SO_KEEPALIVE` zu aktivieren |
QAbstractSocket::MulticastTtlOption | 2 | Setzen Sie diesen Wert auf eine Ganzzahl, um die Socket-Option `IP_MULTICAST_TTL` (TTL für Multicast-Datagramme) festzulegen. |
QAbstractSocket::MulticastLoopbackOption | 3 | Setzen Sie diesen Wert auf 1, um die Socket-Option IP_MULTICAST_LOOP (Multicast-Loopback) zu aktivieren. |
QAbstractSocket::TypeOfServiceOption | 4 | Diese Option wird unter Windows nicht unterstützt. Dies entspricht der Socket-Option `IP_TOS`. Mögliche Werte finden Sie in der folgenden Tabelle. |
QAbstractSocket::SendBufferSizeSocketOption | 5 | Legt die Größe des Socket-Sendepuffers in Byte auf Betriebssystemebene fest. Dies entspricht der Socket-Option `SO_SNDBUF`. Diese Option hat keine Auswirkungen auf die Puffer ` QIODevice ` oder ` QAbstractSocket `. Dieser Enum-Wert wurde in Qt 5.3 eingeführt. |
QAbstractSocket::ReceiveBufferSizeSocketOption | 6 | Legt die Größe des Socket-Empfangspuffers in Byte auf Betriebssystemebene fest. Dies entspricht der Socket-Option „SO_RCVBUF“. Diese Option hat keine Auswirkungen auf die Puffer „ QIODevice “ oder „ QAbstractSocket “ (siehe setReadBufferSize()). Dieser Enum-Wert wurde in Qt 5.3 eingeführt. |
QAbstractSocket::PathMtuSocketOption | 7 | Ruft den Wert der „Path Maximum Transmission Unit“ (PMTU) ab, der dem IP-Stack derzeit bekannt ist, sofern vorhanden. Einige IP-Stacks erlauben auch die Festlegung der MTU für die Übertragung. Dieser Enum-Wert wurde in Qt 5.11 eingeführt. |
QAbstractSocket::KeepAliveIdleOption | 8 | Die Zeit in Sekunden, die die Verbindung inaktiv bleiben muss, bevor TCP mit dem Senden von Keepalive-Proben beginnt, sofern „KeepAliveOption“ aktiviert ist. Dieser Enum-Wert wurde in Qt 6.11 eingeführt. |
QAbstractSocket::KeepAliveIntervalOption | 9 | Die Zeit in Sekunden zwischen einzelnen Keepalive-Proben, sofern „KeepAliveOption“ aktiviert ist. Diese Option wird nicht von allen Betriebssystemen unterstützt. Dieser Enum-Wert wurde in Qt 6.11 eingeführt. |
QAbstractSocket::KeepAliveCountOption | 10 | Die maximale Anzahl von Keepalive-Anfragen, die gesendet werden, bevor TCP die Verbindung trennt, sofern „KeepAliveOption“ aktiviert ist. Diese Option wird nicht von allen Betriebssystemen unterstützt. Dieser Enum-Wert wurde in Qt 6.11 eingeführt. |
Mögliche Werte für „TypeOfServiceOption“ sind:
| Wert | Beschreibung |
|---|---|
| 224 | Netzwerksteuerung |
| 192 | Netzwerkübergreifende Steuerung |
| 160 | CRITIC/ECP |
| 128 | Flash-Übersteuerung |
| 96 | Blitz |
| 64 | Sofort |
| 32 | Priorität |
| 0 | Routine |
Siehe auch QAbstractSocket::setSocketOption() und QAbstractSocket::socketOption().
enum QAbstractSocket::SocketState
Diese Enumeration beschreibt die verschiedenen Zustände, in denen sich ein Socket befinden kann.
| Konstante | Wert | Beschreibung |
|---|---|---|
QAbstractSocket::UnconnectedState | 0 | Der Socket ist nicht verbunden. |
QAbstractSocket::HostLookupState | 1 | Der Socket führt eine Hostnamenssuche durch. |
QAbstractSocket::ConnectingState | 2 | Der Socket hat mit dem Aufbau einer Verbindung begonnen. |
QAbstractSocket::ConnectedState | 3 | Eine Verbindung wurde hergestellt. |
QAbstractSocket::BoundState | 4 | Der Socket ist an eine Adresse und einen Port gebunden. |
QAbstractSocket::ClosingState | 6 | Der Socket steht kurz vor dem Schließen (möglicherweise stehen noch Daten zum Schreiben an). |
QAbstractSocket::ListeningState | 5 | Nur für den internen Gebrauch. |
Siehe auch QAbstractSocket::state().
enum QAbstractSocket::SocketType
Diese Enumeration beschreibt das Protokoll der Transportschicht.
| Konstante | Wert | Beschreibung |
|---|---|---|
QAbstractSocket::TcpSocket | 0 | TCP |
QAbstractSocket::UdpSocket | 1 | UDP |
QAbstractSocket::SctpSocket | 2 | SCTP |
QAbstractSocket::UnknownSocketType | -1 | Andere als TCP, UDP und SCTP |
Siehe auch ` QAbstractSocket::socketType()`.
Dokumentation zu den Member-Funktionen
QAbstractSocket::QAbstractSocket(QAbstractSocket::SocketType socketType, QObject *parent)
Erstellt einen neuen abstrakten Socket vom Typ „ socketType “. Das Argument „ parent “ wird an den Konstruktor von „ QObject “ übergeben.
Siehe auch „ socketType()“, „ QTcpSocket “ und „ QUdpSocket “.
[virtual noexcept] QAbstractSocket::~QAbstractSocket()
Löscht den Socket.
void QAbstractSocket::abort()
Beendet die aktuelle Verbindung und setzt den Socket zurück. Im Gegensatz zu ` disconnectFromHost()` schließt diese Funktion den Socket sofort und verwirft dabei alle noch im Schreibpuffer befindlichen Daten.
Siehe auch disconnectFromHost() und close().
[virtual] bool QAbstractSocket::bind(const QHostAddress &address, quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform)
Führt eine Bindung an address auf Port port durch, wobei die BindMode mode verwendet wird.
Bei UDP-Sockets wird nach dem Binden das Signal ` QUdpSocket::readyRead()` ausgelöst, sobald ein UDP-Datagramm an der angegebenen Adresse und dem angegebenen Port eintrifft. Daher eignet sich diese Funktion zum Schreiben von UDP-Servern.
Bei TCP-Sockets kann diese Funktion verwendet werden, um festzulegen, welche Schnittstelle für eine ausgehende Verbindung verwendet werden soll, was bei mehreren Netzwerkschnittstellen nützlich ist.
Standardmäßig wird der Socket über die Schnittstelle „ DefaultForPlatform “ BindMode gebunden. Wird kein Port angegeben, wird ein zufälliger Port ausgewählt.
Bei Erfolg gibt die Funktion „ true “ zurück und der Socket wechselt in den Status „ BoundState “; andernfalls gibt sie „ false “ zurück.
bool QAbstractSocket::bind(quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform)
Bindet an QHostAddress:Any auf dem Port port unter Verwendung des BindMode mode .
Standardmäßig wird der Socket unter Verwendung von DefaultForPlatform BindMode gebunden. Wenn kein Port angegeben wird, wird ein zufälliger Port ausgewählt.
Dies ist eine überladene Funktion.
[since 6.2] bool QAbstractSocket::bind(QHostAddress::SpecialAddress addr, quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform)
Bindet an die spezielle Adresse addr auf dem Port port unter Verwendung des BindMode mode .
Standardmäßig wird der Socket über die Adresse DefaultForPlatform am Port BindMode gebunden. Wird kein Port angegeben, wird ein zufälliger Port ausgewählt.
Dies ist eine überladene Funktion.
Diese Funktion wurde in Qt 6.2 eingeführt.
[override virtual] qint64 QAbstractSocket::bytesAvailable() const
Implementiert neu: ` QIODevice::bytesAvailable()` const.
Gibt die Anzahl der eingehenden Bytes zurück, die darauf warten, gelesen zu werden.
Siehe auch „ bytesToWrite()“ und „ read()“.
[override virtual] qint64 QAbstractSocket::bytesToWrite() const
Implementiert: ` QIODevice::bytesToWrite()` const.
Gibt die Anzahl der Bytes zurück, die zum Schreiben anstehen. Die Bytes werden geschrieben, sobald die Kontrolle an die Ereignisschleife zurückgegeben wird oder wenn ` flush()` aufgerufen wird.
Siehe auch ` bytesAvailable()` und ` flush()`.
[override virtual] void QAbstractSocket::close()
Implementiert: ` QIODevice::close()`.
Schließt das E/A-Gerät für den Socket und ruft ` disconnectFromHost()` auf, um die Verbindung des Sockets zu schließen.
Eine Beschreibung der Vorgänge, die beim Schließen eines E/A-Geräts stattfinden, finden Sie unter QIODevice::close().
Siehe auch abort().
[virtual] void QAbstractSocket::connectToHost(const QString &hostName, quint16 port, QIODeviceBase::OpenMode openMode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol)
Es wird versucht, eine Verbindung zu hostName über die angegebene port herzustellen. Mit dem Parameter „ protocol “ kann festgelegt werden, welches Netzwerkprotokoll verwendet werden soll (z. B. IPv4 oder IPv6).
Der Socket wird im angegebenen openMode geöffnet und ruft zunächst HostLookupState auf, um anschließend eine Hostnamensauflösung für hostName durchzuführen. Ist die Auflösung erfolgreich, wird hostFound() ausgegeben und QAbstractSocket ruft ConnectingState auf. Anschließend wird versucht, eine Verbindung zu der oder den durch die Auflösung zurückgegebenen Adressen herzustellen. Ist schließlich eine Verbindung hergestellt, ruft QAbstractSocket ConnectedState auf und gibt connected() aus.
Zu jedem Zeitpunkt kann der Socket errorOccurred() ausgeben, um zu signalisieren, dass ein Fehler aufgetreten ist.
hostName kann eine IP-Adresse in Zeichenfolgenform (z. B. „43.195.83.32“) oder ein Hostname (z. B. „example.com“) sein. QAbstractSocket führt nur dann eine Abfrage durch, wenn dies erforderlich ist. port liegt in nativer Byte-Reihenfolge vor.
Siehe auch state(), peerName(), peerAddress(), peerPort() und waitForConnected().
void QAbstractSocket::connectToHost(const QHostAddress &address, quint16 port, QIODeviceBase::OpenMode openMode = ReadWrite)
Es wird versucht, eine Verbindung zu address auf Port port herzustellen.
Dies ist eine überladene Funktion.
[signal] void QAbstractSocket::connected()
Dieses Signal wird ausgelöst, nachdem connectToHost() aufgerufen wurde und eine Verbindung erfolgreich hergestellt wurde.
Hinweis: Auf einigen Betriebssystemen wird das Signal `connected()` möglicherweise direkt vom Aufruf von ` connectToHost()` für Verbindungen zum lokalen Host ausgelöst.
Siehe auch ` connectToHost()` und ` disconnected()`.
[virtual] void QAbstractSocket::disconnectFromHost()
Versucht, den Socket zu schließen. Wenn noch Daten zum Schreiben anstehen, wechselt „ QAbstractSocket “ in den Zustand „ ClosingState “ und wartet, bis alle Daten geschrieben wurden. Schließlich wechselt es in den Zustand „ UnconnectedState “ und sendet das Signal „ disconnected()“.
Siehe auch „ connectToHost()“.
[signal] void QAbstractSocket::disconnected()
Dieses Signal wird ausgelöst, wenn die Verbindung zum Socket getrennt wurde.
Warnung: Wenn Sie die ` sender()`-Funktion für dieses Signal in einem damit verbundenen Slot entfernen müssen, verwenden Sie die Funktion ` deleteLater()`.
Siehe auch connectToHost(), disconnectFromHost() und abort().
QAbstractSocket::SocketError QAbstractSocket::error() const
Gibt den Typ des zuletzt aufgetretenen Fehlers zurück.
Siehe auch „ state()“ und „ errorString()“.
[signal] void QAbstractSocket::errorOccurred(QAbstractSocket::SocketError socketError)
Dieses Signal wird ausgelöst, nachdem ein Fehler aufgetreten ist. Der Parameter „ socketError “ beschreibt die Art des aufgetretenen Fehlers.
Wenn dieses Signal ausgelöst wird, ist der Socket möglicherweise noch nicht bereit für einen erneuten Verbindungsversuch. In diesem Fall sollten Versuche, die Verbindung wiederherzustellen, über die Ereignisschleife erfolgen. Verwenden Sie beispielsweise `QChronoTimer::singleShot()` mit einer Zeitüberschreitung von 0 ns.
QAbstractSocket::SocketError ist kein registrierter Metatyp; daher müssen Sie ihn für Verbindungen in der Warteschlange mit ` Q_DECLARE_METATYPE()` und ` qRegisterMetaType()` registrieren.
Siehe auch error(), errorString() und „Erstellen benutzerdefinierter Qt-Typen“.
bool QAbstractSocket::flush()
Diese Funktion schreibt so viel wie möglich aus dem internen Schreibpuffer in den zugrunde liegenden Netzwerk-Socket, ohne zu blockieren. Wurden Daten geschrieben, gibt diese Funktion „ true “ zurück; andernfalls wird „false“ zurückgegeben.
Rufen Sie diese Funktion auf, wenn Sie möchten, dass „ QAbstractSocket “ sofort mit dem Senden der gepufferten Daten beginnt. Die Anzahl der erfolgreich geschriebenen Bytes hängt vom Betriebssystem ab. In den meisten Fällen müssen Sie diese Funktion nicht aufrufen, da „ QAbstractSocket “ automatisch mit dem Senden der Daten beginnt, sobald die Kontrolle an die Ereignisschleife zurückgegeben wird. Wenn keine Ereignisschleife vorhanden ist, rufen Sie stattdessen „ waitForBytesWritten()“ auf.
Siehe auch ` write()` und ` waitForBytesWritten()`.
[signal] void QAbstractSocket::hostFound()
Dieses Signal wird ausgelöst, nachdem connectToHost() aufgerufen wurde und die Host-Suche erfolgreich war.
Hinweis: Seit Qt 4.6.3 kann ` QAbstractSocket ` `hostFound()` direkt aus dem Aufruf von ` connectToHost()` ausgeben, da ein DNS-Ergebnis möglicherweise zwischengespeichert wurde.
Siehe auch connected().
[override virtual] bool QAbstractSocket::isSequential() const
Implementiert: ` QIODevice::isSequential()` const.
bool QAbstractSocket::isValid() const
Gibt „ true “ zurück, wenn der Socket gültig und einsatzbereit ist; andernfalls wird „ false “ zurückgegeben.
Hinweis: Der Status des Sockets muss „ ConnectedState “ sein, bevor Lese- und Schreibvorgänge durchgeführt werden können.
Siehe auch state().
QHostAddress QAbstractSocket::localAddress() const
Gibt die Host-Adresse des lokalen Sockets zurück, sofern verfügbar; andernfalls wird QHostAddress::Null zurückgegeben.
Dies ist normalerweise die Haupt-IP-Adresse des Hosts, kann jedoch bei Verbindungen zum lokalen Host auch „ QHostAddress::LocalHost “ (127.0.0.1) sein.
Siehe auch „ localPort()“, „ peerAddress()“ und „ setLocalAddress()“.
quint16 QAbstractSocket::localPort() const
Gibt die Host-Portnummer (in nativer Byte-Reihenfolge) des lokalen Sockets zurück, sofern verfügbar; andernfalls wird 0 zurückgegeben.
Siehe auch localAddress(), peerPort() und setLocalPort().
QAbstractSocket::PauseModes QAbstractSocket::pauseMode() const
Gibt den Pausenmodus dieses Sockets zurück.
Siehe auch setPauseMode() und resume().
QHostAddress QAbstractSocket::peerAddress() const
Gibt die Adresse des verbundenen Peers zurück, wenn sich der Socket im Status „ ConnectedState “ befindet; andernfalls wird „ QHostAddress::Null “ zurückgegeben.
Siehe auch peerName(), peerPort(), localAddress() und setPeerAddress().
QString QAbstractSocket::peerName() const
Gibt den Namen des Peers zurück, wie er durch connectToHost() angegeben wurde, oder ein leeres QString, falls connectToHost() nicht aufgerufen wurde.
Siehe auch peerAddress(), peerPort() und setPeerName().
quint16 QAbstractSocket::peerPort() const
Gibt den Port des verbundenen Peers zurück, wenn sich der Socket in ConnectedState befindet; andernfalls wird 0 zurückgegeben.
Siehe auch peerAddress(), localPort() und setPeerPort().
QString QAbstractSocket::protocolTag() const
Gibt das Protokoll-Tag für diesen Socket zurück. Ist das Protokoll-Tag gesetzt, wird es bei der internen Erstellung an ` QNetworkProxyQuery ` übergeben, um das zu verwendende Protokoll-Tag anzugeben.
Siehe auch setProtocolTag() und QNetworkProxyQuery.
QNetworkProxy QAbstractSocket::proxy() const
Gibt den Netzwerk-Proxy für diesen Socket zurück. Standardmäßig wird QNetworkProxy::DefaultProxy verwendet, was bedeutet, dass dieser Socket die Standard-Proxy-Einstellungen der Anwendung abfragt.
Siehe auch setProxy(), QNetworkProxy und QNetworkProxyFactory.
[signal] void QAbstractSocket::proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator)
Dieses Signal kann ausgegeben werden, wenn eine „ proxy “ verwendet wird, die eine Authentifizierung erfordert. Das „ authenticator “-Objekt kann dann mit den erforderlichen Angaben gefüllt werden, um die Authentifizierung zu ermöglichen und die Verbindung fortzusetzen.
Hinweis: Es ist nicht möglich, eine `QueuedConnection` zu verwenden, um eine Verbindung zu diesem Signal herzustellen, da die Verbindung fehlschlägt, wenn das `authenticator`-Objekt bei der Rückgabe des Signals nicht mit neuen Informationen gefüllt wurde.
Siehe auch „ QAuthenticator “ und „ QNetworkProxy “.
qint64 QAbstractSocket::readBufferSize() const
Gibt die Größe des internen Lesepuffers zurück. Dies begrenzt die Datenmenge, die der Client empfangen kann, bevor Sie die Funktion „ read()“ oder „ readAll()“ aufrufen.
Eine Lesepuffergröße von 0 (Standardwert) bedeutet, dass der Puffer keine Größenbeschränkung hat, wodurch sichergestellt wird, dass keine Daten verloren gehen.
Siehe auch ` setReadBufferSize()` und ` read()`.
[override virtual protected] qint64 QAbstractSocket::readData(char *data, qint64 maxSize)
Implementiert neu: QIODevice::readData(char *data, qint64 maxSize).
[override virtual protected] qint64 QAbstractSocket::readLineData(char *data, qint64 maxlen)
Implementiert: QIODevice::readLineData(char *data, qint64 maxSize).
[virtual] void QAbstractSocket::resume()
Setzt die Datenübertragung über den Socket fort. Diese Methode sollte nur verwendet werden, nachdem der Socket so eingestellt wurde, dass er bei Benachrichtigungen pausiert, und eine Benachrichtigung empfangen wurde. Die einzige derzeit unterstützte Benachrichtigung ist „ QSslSocket::sslErrors()“. Der Aufruf dieser Methode, wenn der Socket nicht pausiert ist, führt zu undefiniertem Verhalten.
Siehe auch „ pauseMode()“ und „ setPauseMode()“.
[protected] void QAbstractSocket::setLocalAddress(const QHostAddress &address)
Setzt die Adresse auf der lokalen Seite einer Verbindung auf address.
Sie können diese Funktion in einer Unterklasse von ` QAbstractSocket ` aufrufen, um den Rückgabewert der Funktion ` localAddress()` nach dem Aufbau einer Verbindung zu ändern. Diese Funktion wird häufig bei Proxy-Verbindungen für die Konfiguration virtueller Verbindungen verwendet.
Beachten Sie, dass diese Funktion die lokale Adresse des Sockets nicht vor dem Aufbau einer Verbindung bindet (z. B. ` QAbstractSocket::bind()`).
Siehe auch localAddress(), setLocalPort() und setPeerAddress().
[protected] void QAbstractSocket::setLocalPort(quint16 port)
Legt den Port auf der lokalen Seite einer Verbindung zu port fest.
Sie können diese Funktion in einer Unterklasse von ` QAbstractSocket ` aufrufen, um den Rückgabewert der Funktion ` localPort()` nach dem Aufbau einer Verbindung zu ändern. Diese Funktion wird häufig bei Proxy-Verbindungen für die Konfiguration virtueller Verbindungen verwendet.
Beachten Sie, dass diese Funktion den lokalen Port des Sockets nicht vor dem Aufbau einer Verbindung bindet (z. B. ` QAbstractSocket::bind()`).
Siehe auch localPort(), localAddress(), setLocalAddress() und setPeerPort().
void QAbstractSocket::setPauseMode(QAbstractSocket::PauseModes pauseMode)
Legt fest, ob bei Erhalt einer Benachrichtigung eine Pause eingelegt werden soll. Der Parameter „ pauseMode “ gibt die Bedingungen an, unter denen der Socket angehalten werden soll. Die einzige derzeit unterstützte Benachrichtigung ist „ QSslSocket::sslErrors()“. Bei der Einstellung „ PauseOnSslErrors “ wird die Datenübertragung über den Socket angehalten und muss durch den Aufruf von „ resume()“ explizit wieder aktiviert werden. Standardmäßig ist diese Option auf „ PauseNever “ gesetzt. Diese Option muss vor dem Herstellen einer Verbindung zum Server aufgerufen werden, andernfalls kommt es zu undefiniertem Verhalten.
Siehe auch „ pauseMode()“ und „ resume()“.
[protected] void QAbstractSocket::setPeerAddress(const QHostAddress &address)
Setzt die Adresse der Gegenstelle der Verbindung auf address.
Sie können diese Funktion in einer Unterklasse von ` QAbstractSocket ` aufrufen, um den Rückgabewert der Funktion ` peerAddress()` nach dem Aufbau einer Verbindung zu ändern. Diese Funktion wird häufig bei Proxy-Verbindungen für virtuelle Verbindungseinstellungen verwendet.
Siehe auch „ peerAddress()“, „ setPeerPort()“ und „ setLocalAddress()“.
[protected] void QAbstractSocket::setPeerName(const QString &name)
Setzt den Hostnamen des Remote-Peers auf name.
Sie können diese Funktion in einer Unterklasse von ` QAbstractSocket ` aufrufen, um den Rückgabewert der Funktion ` peerName()` nach dem Aufbau einer Verbindung zu ändern. Diese Funktion wird häufig bei Proxy-Verbindungen für virtuelle Verbindungseinstellungen verwendet.
Siehe auch ` peerName()`.
[protected] void QAbstractSocket::setPeerPort(quint16 port)
Legt den Port der Gegenstelle der Verbindung auf port fest.
Sie können diese Funktion in einer Unterklasse von ` QAbstractSocket ` aufrufen, um den Rückgabewert der Funktion ` peerPort()` zu ändern, nachdem eine Verbindung hergestellt wurde. Diese Funktion wird häufig bei Proxy-Verbindungen für virtuelle Verbindungseinstellungen verwendet.
Siehe auch „ peerPort()“, „ setPeerAddress()“ und „ setLocalPort()“.
void QAbstractSocket::setProtocolTag(const QString &tag)
Setzt das Protokoll-Tag für diesen Socket auf „ tag “.
Siehe auch ` protocolTag()`.
void QAbstractSocket::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 “:
socket->setProxy(QNetworkProxy::NoProxy);Der Standardwert für den Proxy ist „ QNetworkProxy::DefaultProxy “, was bedeutet, dass der Socket die Anwendungseinstellungen verwendet: Ist ein Proxy mit „ QNetworkProxy::setApplicationProxy “ festgelegt, wird dieser verwendet; andernfalls, wenn eine Factory mit „ QNetworkProxyFactory::setApplicationProxyFactory “ festgelegt ist, wird diese Factory mit dem Typ „ QNetworkProxyQuery::TcpSocket “ abgefragt.
Siehe auch proxy(), QNetworkProxy und QNetworkProxyFactory::queryProxy().
[virtual] void QAbstractSocket::setReadBufferSize(qint64 size)
Legt die Größe des internen Lesepuffers von „ QAbstractSocket “ auf „ size “ Bytes fest.
Wenn die Puffergröße auf einen bestimmten Wert begrenzt ist, puffert „ QAbstractSocket “ nicht mehr Daten als diese Größe. Eine Puffergröße von 0 bedeutet jedoch, dass der Lesepuffer unbegrenzt ist und alle eingehenden Daten gepuffert werden. Dies ist die Standardeinstellung.
Diese Option ist nützlich, wenn Sie die Daten nur zu bestimmten Zeitpunkten lesen (z. B. in einer Echtzeit-Streaming-Anwendung) oder wenn Sie Ihren Socket davor schützen möchten, zu viele Daten zu empfangen, was letztendlich dazu führen könnte, dass Ihrer Anwendung der Speicher ausgeht.
Nur ` QTcpSocket ` nutzt den internen Puffer von ` QAbstractSocket`; ` QUdpSocket ` verwendet überhaupt keine Pufferung, sondern stützt sich stattdessen auf die implizite Pufferung des Betriebssystems. Aus diesem Grund hat der Aufruf dieser Funktion bei ` QUdpSocket ` keine Wirkung.
Siehe auch readBufferSize() und read().
[virtual] bool QAbstractSocket::setSocketDescriptor(qintptr socketDescriptor, QAbstractSocket::SocketState socketState = ConnectedState, QIODeviceBase::OpenMode openMode = ReadWrite)
Initialisiert „ QAbstractSocket “ mit dem nativen Socket-Deskriptor „ socketDescriptor “. Gibt „ true “ zurück, wenn „ socketDescriptor “ als gültiger Socket-Deskriptor akzeptiert wird; andernfalls wird „ false “ zurückgegeben. Der Socket wird in dem durch „ openMode “ angegebenen Modus geöffnet und wechselt in den durch „ socketState “ angegebenen Socket-Zustand. Lese- und Schreibpuffer werden geleert, wobei alle ausstehenden Daten verworfen werden.
Hinweis: Es ist nicht möglich, zwei abstrakte Sockets mit demselben nativen Socket-Deskriptor zu initialisieren.
Siehe auch ` socketDescriptor()`.
[protected] void QAbstractSocket::setSocketError(QAbstractSocket::SocketError socketError)
Setzt den Typ des zuletzt aufgetretenen Fehlers auf „ socketError “.
Siehe auch setSocketState() und setErrorString().
[virtual] void QAbstractSocket::setSocketOption(QAbstractSocket::SocketOption option, const QVariant &value)
Setzt den angegebenen Socket „ option “ auf den unter „ value “ beschriebenen Wert.
Hinweis: Da die Optionen auf einem internen Socket gesetzt werden, gelten sie nur, wenn der Socket erstellt wurde. Dies ist erst nach einem Aufruf von ` bind()` oder nach der Ausgabe von ` connected()` garantiert.
Siehe auch socketOption().
[protected] void QAbstractSocket::setSocketState(QAbstractSocket::SocketState state)
Setzt den Status des Sockets auf „ state “.
Siehe auch „ state()“.
[override virtual protected] qint64 QAbstractSocket::skipData(qint64 maxSize)
Implementiert: QIODevice::skipData(qint64 maxSize).
[virtual] qintptr QAbstractSocket::socketDescriptor() const
Gibt den nativen Socket-Deskriptor des Objekts „ QAbstractSocket “ zurück, sofern dieser verfügbar ist; andernfalls wird -1 zurückgegeben.
Wenn der Socket „ QNetworkProxy “ verwendet, ist der zurückgegebene Deskriptor möglicherweise nicht mit nativen Socket-Funktionen verwendbar.
Der Socket-Deskriptor ist nicht verfügbar, wenn sich „ QAbstractSocket “ im Status „ UnconnectedState “ befindet.
Siehe auch „ setSocketDescriptor()“.
[virtual] QVariant QAbstractSocket::socketOption(QAbstractSocket::SocketOption option)
Gibt den Wert der Option „ option “ zurück.
Siehe auch „ setSocketOption()“.
QAbstractSocket::SocketType QAbstractSocket::socketType() const
Gibt den Socket-Typ zurück (TCP, UDP oder andere).
Siehe auch QTcpSocket und QUdpSocket.
QAbstractSocket::SocketState QAbstractSocket::state() const
Gibt den Status des Sockets zurück.
Siehe auch „ error()“.
[signal] void QAbstractSocket::stateChanged(QAbstractSocket::SocketState socketState)
Dieses Signal wird immer dann ausgelöst, wenn sich der Zustand von QAbstractSocket ändert. Der Parameter „ socketState “ gibt den neuen Zustand an.
QAbstractSocket::SocketState ist kein registrierter Metatyp, daher müssen Sie ihn für Verbindungen in der Warteschlange mit ` Q_DECLARE_METATYPE()` und ` qRegisterMetaType()` registrieren.
Siehe auch state() und „Erstellen benutzerdefinierter Qt-Typen“.
[override virtual] bool QAbstractSocket::waitForBytesWritten(int msecs = 30000)
Implementiert: ` QIODevice::waitForBytesWritten(int msecs)`.
Diese Funktion wartet, bis mindestens ein Byte auf den Socket geschrieben wurde und das Signal „ bytesWritten()“ ausgelöst wurde. Die Funktion läuft nach msecs Millisekunden ab; die Standard-Zeitüberschreitung beträgt 30000 Millisekunden.
Die Funktion gibt „ true “ zurück, wenn das Signal „ bytesWritten()“ ausgelöst wird; andernfalls gibt sie „ false “ zurück (wenn ein Fehler aufgetreten ist oder die Operation nach Ablauf des Zeitlimits abgebrochen wurde).
Hinweis: Diese Funktion kann unter Windows gelegentlich fehlschlagen. Ziehen Sie die Verwendung der Ereignisschleife und des Signals „ bytesWritten()“ in Betracht, wenn Ihre Software unter Windows ausgeführt wird.
Siehe auch ` waitForReadyRead()`.
[virtual] bool QAbstractSocket::waitForConnected(int msecs = 30000)
Wartet, bis die Verbindung zum Socket hergestellt ist, maximal msecs Millisekunden. Wenn die Verbindung hergestellt wurde, gibt diese Funktion „ true “ zurück; andernfalls gibt sie „ false “ zurück. Falls „ false “ zurückgegeben wird, können Sie „ error()“ aufrufen, um die Ursache des Fehlers zu ermitteln.
Das folgende Beispiel wartet bis zu einer Sekunde, bis eine Verbindung hergestellt ist:
socket->connectToHost("imap", 143);
if (socket->waitForConnected(1000))
qDebug("Connected!");Wenn „msecs“ den Wert -1 hat, läuft diese Funktion nicht ab.
Hinweis: Diese Funktion wartet möglicherweise etwas länger als bei „ msecs “, je nachdem, wie lange die Host-Suche dauert.
Hinweis: Beimehreren Aufrufen dieser Funktion wird die Zeit nicht kumuliert. Wenn die Funktion ein Timeout erreicht, wird der Verbindungsvorgang abgebrochen.
Hinweis: Diese Funktion kann unter Windows gelegentlich fehlschlagen. Erwägen Sie die Verwendung der Ereignisschleife und des Signals „ connected()“, wenn Ihre Software unter Windows ausgeführt wird.
Siehe auch „ connectToHost()“ und „ connected()“.
[virtual] bool QAbstractSocket::waitForDisconnected(int msecs = 30000)
Wartet, bis die Verbindung zum Socket getrennt wurde, maximal msecs Millisekunden. Wenn die Verbindung erfolgreich getrennt wurde, gibt diese Funktion „ true “ zurück; andernfalls gibt sie „ false “ zurück (wenn das Zeitlimit abgelaufen ist, ein Fehler aufgetreten ist oder dieser QAbstractSocket bereits getrennt ist). Falls „ false “ zurückgegeben wird, können Sie „ error()“ aufrufen, um die Fehlerursache zu ermitteln.
Das folgende Beispiel wartet bis zu einer Sekunde darauf, dass eine Verbindung geschlossen wird:
socket->disconnectFromHost();
if (socket->state()== QAbstractSocket::UnconnectedState
|| socket->waitForDisconnected(1000)) {
qDebug("Disconnected!");
}Wenn „msecs“ den Wert -1 hat, läuft diese Funktion ohne Zeitlimit ab.
Hinweis: Diese Funktion kann unter Windows gelegentlich fehlschlagen. Ziehen Sie die Verwendung der Ereignisschleife und des Signals „ disconnected()“ in Betracht, wenn Ihre Software unter Windows ausgeführt wird.
Siehe auch „ disconnectFromHost()“ und „ close()“.
[override virtual] bool QAbstractSocket::waitForReadyRead(int msecs = 30000)
Umsetzung von: QIODevice::waitForReadyRead(int msecs).
Diese Funktion wartet, bis neue Daten zum Lesen verfügbar sind und das Signal „ readyRead()“ ausgelöst wurde. Die Funktion läuft nach msecs Millisekunden ab; die Standard-Zeitüberschreitung beträgt 30000 Millisekunden.
Die Funktion gibt „ true “ zurück, wenn das Signal „ readyRead()“ ausgelöst wurde und neue Daten zum Lesen verfügbar sind; andernfalls gibt sie „ false “ zurück (wenn ein Fehler aufgetreten ist oder die Operation eine Zeitüberschreitung erfahren hat).
Hinweis: Diese Funktion kann unter Windows gelegentlich fehlschlagen. Ziehen Sie die Verwendung der Ereignisschleife und des Signals „ readyRead()“ in Betracht, wenn Ihre Software unter Windows ausgeführt wird.
Siehe auch ` waitForBytesWritten()`.
[override virtual protected] qint64 QAbstractSocket::writeData(const char *data, qint64 size)
Implementiert: ` QIODevice::writeData` (const char *data, qint64 maxSize).
© 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.