QAbstractSocket Class
Die Klasse QAbstractSocket bietet die Basisfunktionalität, die allen Socket-Typen gemeinsam ist. Mehr...
Kopfzeile: | #include <QAbstractSocket> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
qmake: | QT += network |
Vererbt: | QIODevice |
Vererbt von: | QTcpSocket und QUdpSocket |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- QAbstractSocket ist Teil der Network Programming API.
Hinweis: Alle Funktionen in 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, …, PathMtuSocketOption } |
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) |
Reimplementierte ö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) |
Reimplementierte 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 |
Detaillierte 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:
- Instanziieren Sie QTcpSocket oder QUdpSocket.
- Erstellen Sie einen nativen Socket-Deskriptor, instanziieren Sie QAbstractSocket und rufen Sie setSocketDescriptor() auf, um den nativen Socket zu umhüllen.
TCP (Transmission Control Protocol) ist ein zuverlässiges, streamorientiertes, 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 Übertragung von Daten geeignet ist, während das leichtgewichtige UDP verwendet werden kann, wenn die Zuverlässigkeit nicht wichtig ist.
Die API von QAbstractSocket vereinheitlicht die meisten der Unterschiede zwischen den beiden Protokollen. Zum Beispiel, obwohl UDP verbindungslos ist, baut connectToHost() eine virtuelle Verbindung für UDP-Sockets auf, was es Ihnen ermöglicht, QAbstractSocket auf mehr oder weniger die gleiche Art und Weise zu benutzen, unabhängig vom zugrunde liegenden Protokoll. Intern merkt sich QAbstractSocket die Adresse und den Port, die an connectToHost() übergeben wurden, und Funktionen wie read() und write() verwenden diese Werte.
QAbstractSocket hat zu jeder Zeit einen Status (zurückgegeben von state()). Der Anfangszustand ist UnconnectedState. Nach dem Aufruf von connectToHost() geht der Socket zunächst in HostLookupState über. Wenn der Host gefunden wird, geht QAbstractSocket in ConnectingState über und sendet das Signal hostFound(). Wenn die Verbindung hergestellt wurde, wird ConnectedState aufgerufen und das Signal connected() ausgegeben. Wenn in irgendeiner Phase ein Fehler auftritt, wird errorOccurred() ausgegeben. Wenn sich der Status ändert, wird stateChanged() ausgegeben. Der Einfachheit halber gibt isValid() true
zurück, wenn der Socket zum Lesen und Schreiben bereit ist. Beachten Sie jedoch, dass der Zustand des Sockets ConnectedState sein muss, bevor gelesen und geschrieben werden kann.
Lesen oder schreiben Sie Daten, indem Sie read() oder write() aufrufen, oder verwenden Sie die Komfortfunktionen readLine() und readAll(). QAbstractSocket erbt auch getChar(), putChar() und ungetChar() von QIODevice, die mit einzelnen Bytes arbeiten. Das Signal bytesWritten() wird ausgegeben, wenn Daten in den Socket geschrieben wurden. Beachten Sie, dass Qt die Größe des Schreibpuffers nicht begrenzt. Sie können seine Größe überwachen, indem Sie auf dieses Signal hören.
Das Signal readyRead() wird jedes Mal ausgegeben, wenn ein neues Datenpaket angekommen ist. bytesAvailable() gibt dann die Anzahl der Bytes zurück, die zum Lesen verfügbar sind. Normalerweise würden Sie das Signal readyRead() mit einem Slot verbinden und dort alle verfügbaren Daten lesen. Wenn Sie nicht alle Daten auf einmal lesen, sind die verbleibenden Daten auch später noch verfügbar, und alle neu ankommenden 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 geht in QAbstractSocket::ClosingState über. Nachdem alle anstehenden Daten in den Socket geschrieben wurden, schließt QAbstractSocket den Socket, ruft QAbstractSocket::UnconnectedState auf und sendet disconnected(). Wenn Sie eine Verbindung sofort abbrechen und alle anstehenden Daten verwerfen wollen, rufen Sie stattdessen abort() auf. Wenn der entfernte Host die Verbindung schließt, sendet QAbstractSocket errorOccurred(QAbstractSocket::RemoteHostClosedError), wobei der Socket-Status immer noch ConnectedState ist, und dann wird das Signal disconnected() gesendet.
Der Port und die Adresse der verbundenen Gegenstelle werden durch die Aufrufe peerPort() und peerAddress() ermittelt. peerName() gibt den Hostnamen der Gegenstelle zurück, wie er an connectToHost() übergeben wurde. localPort() und localAddress() geben den Port und die Adresse des lokalen Sockets zurück.
QAbstractSocket bietet eine Reihe von Funktionen, die den aufrufenden Thread anhalten, bis bestimmte Signale ausgegeben werden. Diese Funktionen können verwendet werden, um blockierende Sockets zu implementieren:
- waitForConnected() blockiert, bis eine Verbindung hergestellt wurde.
- waitForReadyRead() blockiert, bis neue Daten zum Lesen verfügbar sind.
- waitForBytesWritten() blockiert, bis eine Nutzlast an Daten in den Socket geschrieben wurde.
- waitForDisconnected() blockiert, bis die Verbindung geschlossen wurde.
Wir zeigen 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() 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 normalerweise 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. Siehe die Beispiele fortuneclient und blockingfortuneclient für einen Überblick über beide Ansätze.
Hinweis: Wir raten davon ab, die blockierenden Funktionen zusammen mit Signalen zu verwenden. Es sollte eine der beiden Möglichkeiten verwendet werden.
QAbstractSocket kann mit den Stream-Operatoren (operator<<() und operator>>()) von QTextStream und QDataStream verwendet werden. Es gibt jedoch ein Problem, das zu beachten ist: Sie müssen sicherstellen, dass genügend Daten vorhanden sind, bevor Sie versuchen, sie mit operator>>() zu lesen.
Siehe auch QNetworkAccessManager und QTcpServer.
Dokumentation der Mitgliedstypen
enum QAbstractSocket::BindFlag
flags QAbstractSocket::BindMode
Diese Aufzählung 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 dieselbe Adresse und denselben Port abhören (z. B. kann ein Webserver mit mehreren vorverzweigten Abhörern die Antwortzeit erheblich verbessern). Da es jedoch jedem Dienst erlaubt ist, sich neu zu binden, unterliegt diese Option bestimmten Sicherheitsüberlegungen. Beachten Sie, dass Sie durch die Kombination dieser Option mit ReuseAddressHint Ihrem Dienst auch erlauben, eine bestehende gemeinsame Adresse neu zu binden. Unter Unix entspricht dies der Socket-Option SO_REUSEADDR. Unter Windows ist dies das Standardverhalten, daher wird diese Option ignoriert. |
QAbstractSocket::DontShareAddress | 0x2 | Binden Sie die Adresse und den Port exklusiv, so dass keine anderen Dienste eine erneute Bindung vornehmen können. Wenn Sie diese Option an QAbstractSocket::bind() übergeben, ist gewährleistet, dass Ihr Dienst im Erfolgsfall der einzige ist, der auf die Adresse und den Port hört. Kein Dienst darf sich neu binden, selbst wenn er ReuseAddressHint übergibt. Diese Option bietet mehr Sicherheit als ShareAddress, erfordert aber auf bestimmten Betriebssystemen, dass Sie den Server mit Administratorrechten ausführen. Unter Unix und macOS ist die Nichtfreigabe das Standardverhalten für die Bindung einer Adresse und eines Anschlusses, daher wird diese Option ignoriert. Unter Windows verwendet diese Option die Socket-Option SO_EXCLUSIVEADDRUSE. |
QAbstractSocket::ReuseAddressHint | 0x4 | Gibt QAbstractSocket einen Hinweis, dass es versuchen soll, den Dienst neu zu binden, auch 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 ist dies gleichbedeutend mit (DontShareAddress + ReuseAddressHint) und unter Windows gleichbedeutend mit ShareAddress. |
Der Typ BindMode ist ein Typedef für QFlags<BindFlag>. Er speichert eine OR-Kombination von BindFlag-Werten.
enum QAbstractSocket::NetworkLayerProtocol
Diese Aufzählung beschreibt die in Qt verwendeten Protokollwerte 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 Aufzählung beschreibt das Verhalten, wenn der Socket sich mit der weiteren Datenübertragung zurückhalten soll. Die einzige derzeit unterstützte Benachrichtigung ist QSslSocket::sslErrors().
Konstante | Wert | Beschreibung |
---|---|---|
QAbstractSocket::PauseNever | 0x0 | Die Datenübertragung auf dem Socket nicht unterbrechen. Dies ist die Voreinstellung und entspricht dem Verhalten von Qt 4. |
QAbstractSocket::PauseOnSslErrors | 0x1 | Pausiere die Datenübertragung auf dem Socket beim Empfang einer SSL-Fehlermeldung. D.H. QSslSocket::sslErrors(). |
Der PauseModes Typ ist ein Typedef für QFlags<PauseMode>. Er speichert eine OR-Kombination von PauseMode-Werten.
enum QAbstractSocket::SocketError
Diese Aufzählung beschreibt die Socket-Fehler, die auftreten können.
Konstante | Wert | Beschreibung |
---|---|---|
QAbstractSocket::ConnectionRefusedError | 0 | Die Verbindung wurde von der Gegenstelle abgelehnt (oder die Zeit wurde überschritten). |
QAbstractSocket::RemoteHostClosedError | 1 | Der entfernte Host hat die Verbindung geschlossen. Beachten Sie, dass der Client-Socket (d. h. dieser Socket) geschlossen wird, nachdem die Remote-Close-Benachrichtigung gesendet wurde. |
QAbstractSocket::HostNotFoundError | 2 | Die Hostadresse wurde nicht gefunden. |
QAbstractSocket::SocketAccessError | 3 | Die Socket-Operation ist fehlgeschlagen, weil die Anwendung nicht über die erforderlichen Berechtigungen verfügte. |
QAbstractSocket::SocketResourceError | 4 | Dem lokalen System sind die Ressourcen ausgegangen (z. B. zu viele Sockets). |
QAbstractSocket::SocketTimeoutError | 5 | Die Socket-Operation hat eine Zeitüberschreitung verursacht. |
QAbstractSocket::DatagramTooLargeError | 6 | Das Datagramm war größer als das Limit des Betriebssystems (das bis zu 8192 Bytes betragen kann). |
QAbstractSocket::NetworkError | 7 | Es ist ein Fehler im Netzwerk aufgetreten (z. B. wurde das Netzwerkkabel versehentlich eingesteckt). |
QAbstractSocket::AddressInUseError | 8 | Die für QAbstractSocket::bind() angegebene Adresse ist bereits in Gebrauch und wurde als exklusiv festgelegt. |
QAbstractSocket::SocketAddressNotAvailableError | 9 | Die an 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 verwendet 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 letzte versuchte Operation wurde noch nicht beendet (läuft noch im Hintergrund). |
QAbstractSocket::ProxyConnectionRefusedError | 14 | Der Proxyserver 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 zur letzten Gegenstelle hergestellt wurde) |
QAbstractSocket::ProxyConnectionTimeoutError | 16 | Die Verbindung zum Proxyserver wurde unterbrochen oder der Proxyserver hat in der Authentifizierungsphase nicht mehr geantwortet. |
QAbstractSocket::ProxyNotFoundError | 17 | Die mit setProxy() eingestellte Proxy-Adresse (oder der Anwendungsproxy) wurde nicht gefunden. |
QAbstractSocket::ProxyProtocolError | 18 | Die Verbindungsaushandlung mit dem Proxyserver ist fehlgeschlagen, da die Antwort des Proxyservers nicht verstanden wurde. |
QAbstractSocket::OperationError | 19 | Es wurde ein Vorgang 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 das Ergebnis einer fehlerhaften Installation oder Fehlkonfiguration der Bibliothek. |
QAbstractSocket::SslInvalidUserDataError | 21 | Es wurden ungültige Daten (Zertifikat, Schlüssel, Cypher usw.) bereitgestellt, und ihre Verwendung führte zu einem Fehler in der SSL-Bibliothek. |
QAbstractSocket::TemporaryError | 22 | Es ist ein temporärer Fehler aufgetreten (z. B. würde die Operation blockieren und der Socket ist nicht blockierend). |
QAbstractSocket::UnknownSocketError | -1 | Ein nicht identifizierter Fehler ist aufgetreten. |
Siehe auch QAbstractSocket::error() und QAbstractSocket::errorOccurred().
enum QAbstractSocket::SocketOption
Diese Aufzählung stellt die Optionen dar, die für ein Socket gesetzt werden können. Falls gewünscht, können sie gesetzt werden, nachdem das Signal connected() vom Socket empfangen wurde oder nachdem ein neuer Socket von QTcpServer empfangen wurde.
Konstante | Wert | Beschreibung |
---|---|---|
QAbstractSocket::LowDelayOption | 0 | Versucht, den Socket für eine niedrige Latenzzeit zu optimieren. Bei QTcpSocket würde dies die Option TCP_NODELAY setzen und den Nagle-Algorithmus deaktivieren. Setzen Sie dies auf 1, um zu aktivieren. |
QAbstractSocket::KeepAliveOption | 1 | Setzen Sie diesen Wert auf 1, um die Socket-Option SO_KEEPALIVE zu aktivieren. |
QAbstractSocket::MulticastTtlOption | 2 | Setzen Sie dies auf einen ganzzahligen Wert, um die Socket-Option IP_MULTICAST_TTL (TTL für Multicast-Datagramme) zu setzen. |
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 siehe Tabelle unten. |
QAbstractSocket::SendBufferSizeSocketOption | 5 | Legt die Größe des Socket-Sendepuffers in Bytes auf der Betriebssystemebene fest. Dies entspricht der Socket-Option SO_SNDBUF. Diese Option hat keinen Einfluss auf die Puffer QIODevice oder QAbstractSocket. Dieser Enum-Wert wurde in Qt 5.3 eingeführt. |
QAbstractSocket::ReceiveBufferSizeSocketOption | 6 | Setzt die Größe des Socket-Empfangspuffers in Bytes auf OS-Ebene. Dies entspricht der Socket-Option SO_RCVBUF. Diese Option hat keinen Einfluss 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, falls vorhanden. Einige IP-Stacks erlauben auch die Einstellung der MTU für die Übertragung. Dieser Enum-Wert wurde in Qt 5.11 eingeführt. |
Mögliche Werte für TypeOfServiceOption sind:
Wert | Beschreibung |
---|---|
224 | Netzwerkkontrolle |
192 | Steuerung des Internet-Netzwerks |
160 | CRITIC/ECP |
128 | Flash-Übersteuerung |
96 | Blitzlicht |
64 | Unmittelbar |
32 | Vorrang |
0 | Routine |
Siehe auch QAbstractSocket::setSocketOption() und QAbstractSocket::socketOption().
enum QAbstractSocket::SocketState
Diese Aufzählung 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 Suche nach dem Hostnamen durch. |
QAbstractSocket::ConnectingState | 2 | Der Socket hat mit dem Aufbau einer Verbindung begonnen. |
QAbstractSocket::ConnectedState | 3 | Eine Verbindung ist aufgebaut. |
QAbstractSocket::BoundState | 4 | Der Socket ist an eine Adresse und einen Port gebunden. |
QAbstractSocket::ClosingState | 6 | Der Socket ist im Begriff, sich zu schließen (möglicherweise warten noch Daten darauf, geschrieben zu werden). |
QAbstractSocket::ListeningState | 5 | Nur für den internen Gebrauch. |
Siehe auch QAbstractSocket::state().
enum QAbstractSocket::SocketType
Diese Aufzählung 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 der Mitgliedsfunktionen
QAbstractSocket::QAbstractSocket(QAbstractSocket::SocketType socketType, QObject *parent)
Erzeugt 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()
Zerstört die Steckdose.
void QAbstractSocket::abort()
Bricht die aktuelle Verbindung ab und setzt den Socket zurück. Im Gegensatz zu disconnectFromHost() schließt diese Funktion den Socket sofort und verwirft alle anstehenden Daten im Schreibpuffer.
Siehe auch disconnectFromHost() und close().
[virtual]
bool QAbstractSocket::bind(const QHostAddress &address, quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform)
Bindet an address am Port port, unter Verwendung der BindMode mode .
Bei UDP-Sockets wird nach der Bindung das Signal QUdpSocket::readyRead() ausgegeben, wenn ein UDP-Datagramm an der angegebenen Adresse und dem angegebenen Port ankommt. Daher ist diese Funktion nützlich, um UDP-Server zu schreiben.
Bei TCP-Sockets kann mit dieser Funktion angegeben werden, welche Schnittstelle für eine ausgehende Verbindung verwendet werden soll, was im Falle mehrerer Netzwerkschnittstellen nützlich ist.
Standardmäßig wird der Socket über die DefaultForPlatform BindMode gebunden. Wenn kein Port angegeben wird, wird ein zufälliger Port gewählt.
Bei Erfolg gibt die Funktion true
zurück, und der Socket wird in BoundState eingetragen; andernfalls gibt sie false
zurück.
bool QAbstractSocket::bind(quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform)
Dies ist eine überladene Funktion.
Bindet an QHostAddress:Any am Port port, unter Verwendung der BindMode mode .
Standardmäßig wird der Socket über die DefaultForPlatform BindMode gebunden. Wenn kein Port angegeben wird, wird ein zufälliger Port gewählt.
[since 6.2]
bool QAbstractSocket::bind(QHostAddress::SpecialAddress addr, quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform)
Dies ist eine überladene Funktion.
Bindet an die spezielle Adresse addr am Port port, unter Verwendung der BindMode mode .
Standardmäßig wird der Socket über die DefaultForPlatform BindMode gebunden. Wenn kein Port angegeben wird, wird ein zufälliger Port gewählt.
Diese Funktion wurde in Qt 6.2 eingeführt.
[override virtual]
qint64 QAbstractSocket::bytesAvailable() const
Reimplements: 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
Reimplements: QIODevice::bytesToWrite() const.
Gibt die Anzahl der Bytes zurück, die darauf warten, geschrieben zu werden. Die Bytes werden geschrieben, wenn die Kontrolle an die Ereignisschleife zurückgeht oder wenn flush() aufgerufen wird.
Siehe auch bytesAvailable() und flush().
[override virtual]
void QAbstractSocket::close()
Reimplements: 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.
Siehe QIODevice::close() für eine Beschreibung der Aktionen, die auftreten, wenn ein E/A-Gerät geschlossen wird.
Siehe auch abort().
[virtual]
void QAbstractSocket::connectToHost(const QString &hostName, quint16 port, QIODeviceBase::OpenMode openMode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol)
Versucht, eine Verbindung zu hostName auf der angegebenen port herzustellen. Der Parameter protocol kann verwendet werden, um das zu verwendende Netzwerkprotokoll anzugeben (z. B. IPv4 oder IPv6).
Der Socket wird in der angegebenen openMode geöffnet und gibt zunächst HostLookupState ein, dann führt er einen Hostnamen-Lookup von hostName durch. Wenn der Lookup erfolgreich ist, wird hostFound() ausgegeben und QAbstractSocket gibt ConnectingState ein. Dann wird versucht, eine Verbindung zu der Adresse oder den Adressen herzustellen, die von der Suche zurückgegeben wurden. Wenn eine Verbindung zustande kommt, gibt QAbstractSocket ConnectedState ein und sendet connected().
Zu jedem Zeitpunkt kann der Socket errorOccurred() ausgeben, um zu signalisieren, dass ein Fehler aufgetreten ist.
hostName kann eine IP-Adresse in Stringform (z. B. "43.195.83.32") oder ein Hostname (z. B. "example.com") sein. QAbstractSocket führt nur bei Bedarf eine Suche durch. port ist in nativer Byte-Reihenfolge.
Siehe auch state(), peerName(), peerAddress(), peerPort(), und waitForConnected().
void QAbstractSocket::connectToHost(const QHostAddress &address, quint16 port, QIODeviceBase::OpenMode openMode = ReadWrite)
Dies ist eine überladene Funktion.
Versucht, eine Verbindung zu address auf Port port herzustellen.
[signal]
void QAbstractSocket::connected()
Dieses Signal wird ausgegeben, nachdem connectToHost() aufgerufen wurde und eine Verbindung erfolgreich hergestellt wurde.
Hinweis: Auf einigen Betriebssystemen kann das connected()-Signal direkt vom connectToHost()-Aufruf für Verbindungen zum localhost ausgegeben werden.
Siehe auch connectToHost() und disconnected().
[virtual]
void QAbstractSocket::disconnectFromHost()
Versucht, den Socket zu schließen. Wenn noch Daten darauf warten, geschrieben zu werden, wechselt QAbstractSocket zu ClosingState und wartet, bis alle Daten geschrieben worden sind. Schließlich geht es in UnconnectedState über und gibt das Signal disconnected() aus.
Siehe auch connectToHost().
[signal]
void QAbstractSocket::disconnected()
Dieses Signal wird ausgegeben, wenn die Verbindung zur Steckdose unterbrochen wurde.
Achtung! Wenn Sie die sender() dieses Signals in einem mit ihm verbundenen Slot löschen 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 ausgegeben, wenn ein Fehler aufgetreten ist. Der Parameter socketError beschreibt die Art des aufgetretenen Fehlers.
Wenn dieses Signal ausgegeben wird, kann es sein, dass der Socket nicht für einen erneuten Verbindungsversuch bereit ist. In diesem Fall sollte der Versuch, die Verbindung wiederherzustellen, aus der Ereignisschleife heraus erfolgen. Verwenden Sie zum Beispiel QChronoTimer::singleShot() mit 0ns als Timeout.
QAbstractSocket::SocketError QChronoTimer::singleShot() ist kein registrierter Metatyp, daher müssen Sie ihn für Warteschlangenverbindungen mit Q_DECLARE_METATYPE() und qRegisterMetaType() registrieren.
Siehe auch error(), errorString() und Benutzerdefinierte Qt-Typen erstellen.
bool QAbstractSocket::flush()
Diese Funktion schreibt so viel wie möglich aus dem internen Schreibpuffer in den zugrunde liegenden Netzwerksocket, ohne zu blockieren. Wenn Daten geschrieben wurden, gibt diese Funktion true
zurück; andernfalls wird false zurückgegeben.
Rufen Sie diese Funktion auf, wenn Sie QAbstractSocket benötigen, um sofort mit dem Senden von gepufferten Daten zu beginnen. 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ückgeht. Wenn keine Ereignisschleife vorhanden ist, rufen Sie stattdessen waitForBytesWritten() auf.
Siehe auch write() und waitForBytesWritten().
[signal]
void QAbstractSocket::hostFound()
Dieses Signal wird ausgegeben, nachdem connectToHost() aufgerufen wurde und der Host-Lookup erfolgreich war.
Hinweis: Seit Qt 4.6.3 kann QAbstractSocket hostFound() direkt nach dem Aufruf von connectToHost() ausgeben, da ein DNS-Ergebnis zwischengespeichert worden sein könnte.
Siehe auch connected().
[override virtual]
bool QAbstractSocket::isSequential() const
Reimplements: 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 Zustand des Sockets muss ConnectedState sein, bevor gelesen und geschrieben werden kann.
Siehe auch state().
QHostAddress QAbstractSocket::localAddress() const
Gibt die Host-Adresse des lokalen Sockets zurück, falls vorhanden; andernfalls wird QHostAddress::Null zurückgegeben.
Dies ist normalerweise die Haupt-IP-Adresse des Hosts, kann aber auch QHostAddress::LocalHost (127.0.0.1) für Verbindungen zum lokalen Host sein.
Siehe auch localPort(), peerAddress(), und setLocalAddress().
quint16 QAbstractSocket::localPort() const
Gibt die Host-Portnummer (in nativer Byte-Reihenfolge) des lokalen Sockets zurück, falls vorhanden; 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 der verbundenen Gegenstelle zurück, wenn sich der Socket in ConnectedState befindet; andernfalls wird QHostAddress::Null zurückgegeben.
Siehe auch peerName(), peerPort(), localAddress(), und setPeerAddress().
QString QAbstractSocket::peerName() const
Gibt den Namen der Gegenstelle zurück, wie in connectToHost() angegeben, oder ein leeres QString, wenn connectToHost() nicht aufgerufen wurde.
Siehe auch peerAddress(), peerPort(), und setPeerName().
quint16 QAbstractSocket::peerPort() const
Gibt den Port der verbundenen Gegenstelle 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. Wenn das Protokoll-Tag gesetzt ist, wird es an QNetworkProxyQuery übergeben, wenn dieses intern erstellt wird, 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 für die Anwendung abfragt.
Siehe auch setProxy(), QNetworkProxy, und QNetworkProxyFactory.
[signal]
void QAbstractSocket::proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator)
Dieses Signal kann ausgegeben werden, wenn ein proxy verwendet wird, das eine Authentifizierung erfordert. Das authenticator Objekt kann dann mit den erforderlichen Details ausgefü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 der Authenticator nicht mit neuen Informationen ausgefüllt wurde, wenn das Signal zurückkehrt.
Siehe auch QAuthenticator und QNetworkProxy.
qint64 QAbstractSocket::readBufferSize() const
Gibt die Größe des internen Lesepuffers zurück. Damit wird die Datenmenge begrenzt, die der Client empfangen kann, bevor Sie read() oder readAll() aufrufen.
Eine Lesepuffergröße von 0 (die Vorgabe) 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)
Reimplements: QIODevice::readData(char *data, qint64 maxSize).
[override virtual protected]
qint64 QAbstractSocket::readLineData(char *data, qint64 maxlen)
Reimplements: QIODevice::readLineData(char *data, qint64 maxSize).
[virtual]
void QAbstractSocket::resume()
Setzt die Datenübertragung auf dem 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() zu ändern, nachdem eine Verbindung hergestellt worden ist. Diese Funktion wird üblicherweise von Proxy-Verbindungen für virtuelle Verbindungseinstellungen verwendet.
Beachten Sie, dass diese Funktion nicht die lokale Adresse des Sockets vor einer Verbindung bindet (z.B. QAbstractSocket::bind()).
Siehe auch localAddress(), setLocalPort(), und setPeerAddress().
[protected]
void QAbstractSocket::setLocalPort(quint16 port)
Setzt den Port auf der lokalen Seite einer Verbindung auf port.
Sie können diese Funktion in einer Unterklasse von QAbstractSocket aufrufen, um den Rückgabewert der Funktion localPort() zu ändern, nachdem eine Verbindung hergestellt worden ist. Diese Funktion wird üblicherweise von Proxy-Verbindungen für virtuelle Verbindungseinstellungen verwendet.
Beachten Sie, dass diese Funktion nicht den lokalen Port des Sockets vor einer Verbindung bindet (z.B. QAbstractSocket::bind()).
Siehe auch localPort(), localAddress(), setLocalAddress(), und setPeerPort().
void QAbstractSocket::setPauseMode(QAbstractSocket::PauseModes pauseMode)
Legt fest, ob beim Empfang 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(). Wenn er auf PauseOnSslErrors gesetzt ist, wird die Datenübertragung auf dem Socket angehalten und muss durch den Aufruf von resume() explizit wieder aktiviert werden. Standardmäßig ist diese Option auf PauseNever gesetzt. Diese Option muss aufgerufen werden, bevor eine Verbindung zum Server hergestellt wird, da sie sonst zu undefiniertem Verhalten führt.
Siehe auch pauseMode() und resume().
[protected]
void QAbstractSocket::setPeerAddress(const QHostAddress &address)
Setzt die Adresse der entfernten Seite der Verbindung auf address.
Sie können diese Funktion in einer Unterklasse von QAbstractSocket aufrufen, um den Rückgabewert der Funktion peerAddress() zu ändern, nachdem eine Verbindung hergestellt worden ist. Diese Funktion wird häufig von Proxy-Verbindungen für virtuelle Verbindungseinstellungen verwendet.
Siehe auch peerAddress(), setPeerPort(), und setLocalAddress().
[protected]
void QAbstractSocket::setPeerName(const QString &name)
Setzt den Hostnamen der Gegenstelle auf name.
Sie können diese Funktion in einer Unterklasse von QAbstractSocket aufrufen, um den Rückgabewert der Funktion peerName() zu ändern, nachdem eine Verbindung hergestellt worden ist. Diese Funktion wird häufig von Proxy-Verbindungen für virtuelle Verbindungseinstellungen verwendet.
Siehe auch peerName().
[protected]
void QAbstractSocket::setPeerPort(quint16 port)
Setzt den Port der entfernten Seite der Verbindung auf port.
Sie können diese Funktion in einer Unterklasse von QAbstractSocket aufrufen, um den Rückgabewert der Funktion peerPort() zu ändern, nachdem eine Verbindung hergestellt worden ist. Diese Funktion wird häufig von 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)
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:
socket->setProxy(QNetworkProxy::NoProxy);
Der Standardwert für den Proxy ist QNetworkProxy::DefaultProxy, was bedeutet, dass der Socket die Einstellungen der Anwendung verwendet: wenn ein Proxy mit QNetworkProxy::setApplicationProxy gesetzt ist, wird er diesen verwenden; andernfalls, wenn eine Factory mit QNetworkProxyFactory::setApplicationProxyFactory gesetzt ist, wird er diese Factory mit dem Typ QNetworkProxyQuery::TcpSocket abfragen.
Siehe auch proxy(), QNetworkProxy, und QNetworkProxyFactory::queryProxy().
[virtual]
void QAbstractSocket::setReadBufferSize(qint64 size)
Setzt die Größe des internen Lesepuffers von QAbstractSocket auf size Bytes.
Wenn die Puffergröße auf eine bestimmte Größe begrenzt ist, wird QAbstractSocket nicht mehr als diese Datenmenge puffern. Ausnahmsweise bedeutet eine Puffergröße von 0, 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 vor dem Empfang zu vieler Daten schützen wollen, was dazu führen könnte, dass Ihrer Anwendung der Speicher ausgeht.
Nur QTcpSocket verwendet den internen Puffer von QAbstractSocket; QUdpSocket verwendet überhaupt keine Pufferung, sondern verlässt sich auf die implizite Pufferung durch das Betriebssystem. Aus diesem Grund hat der Aufruf dieser Funktion auf QUdpSocket keine Auswirkungen.
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 geht in den durch socketState angegebenen Socket-Status über. Lese- und Schreibpuffer werden geleert, wobei alle anstehenden 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 option auf den durch value beschriebenen Wert.
Hinweis: Da die Optionen auf einen internen Socket gesetzt werden, gelten die Optionen nur, wenn der Socket erstellt wurde. Dies ist garantiert nur nach einem Aufruf von bind() der Fall, oder wenn connected() ausgegeben wurde.
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)
Reimplements: QIODevice::skipData(qint64 maxSize).
[virtual]
qintptr QAbstractSocket::socketDescriptor() const
Gibt den nativen Socket-Deskriptor des QAbstractSocket -Objekts zurück, falls 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 QAbstractSocket in UnconnectedState ist.
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 (TCP, UDP oder andere) zurück.
Siehe auch QTcpSocket und QUdpSocket.
QAbstractSocket::SocketState QAbstractSocket::state() const
Gibt den Zustand des Sockets zurück.
Siehe auch error().
[signal]
void QAbstractSocket::stateChanged(QAbstractSocket::SocketState socketState)
Dieses Signal wird ausgesendet, wenn sich der Zustand von QAbstractSocket ändert. Der Parameter socketState ist der neue Zustand.
QAbstractSocket::SocketState ist kein registrierter Metatyp, daher müssen Sie ihn für Warteschlangenverbindungen mit Q_DECLARE_METATYPE() und qRegisterMetaType() registrieren.
Siehe auch state() und Benutzerdefinierte Qt-Typen erstellen.
[override virtual]
bool QAbstractSocket::waitForBytesWritten(int msecs = 30000)
Reimplements: QIODevice::waitForBytesWritten(int msecs).
Diese Funktion blockiert, bis mindestens ein Byte auf den Socket geschrieben wurde und das Signal bytesWritten() ausgegeben wurde. Die Funktion führt nach msecs Millisekunden eine Zeitüberschreitung durch; die Standardzeitüberschreitung beträgt 30000 Millisekunden.
Die Funktion gibt true
zurück, wenn das Signal bytesWritten() ausgegeben wurde; andernfalls gibt sie false
zurück (wenn ein Fehler aufgetreten ist oder die Zeit für die Operation abgelaufen ist).
Hinweis: Diese Funktion kann unter Windows zufällig fehlschlagen. Erwägen Sie die Verwendung der Ereignisschleife und des Signals bytesWritten(), wenn Ihre Software unter Windows läuft.
Siehe auch waitForReadyRead().
[virtual]
bool QAbstractSocket::waitForConnected(int msecs = 30000)
Wartet, bis der Socket verbunden ist, bis zu msecs Millisekunden. Wenn die Verbindung hergestellt wurde, gibt diese Funktion true
zurück, andernfalls false
. Wenn 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 aufgebaut ist:
socket->connectToHost("imap", 143);if (socket->waitForConnected(1000)) qDebug("Connected!");
Wenn msecs -1 ist, wird diese Funktion nicht abgebrochen.
Hinweis: Diese Funktion kann etwas länger als msecs warten, je nachdem, wie lange es dauert, die Hostsuche abzuschließen.
Hinweis: Bei mehreren Aufrufen dieser Funktion wird die Zeit nicht kumuliert. Wenn die Funktion eine Zeitüberschreitung aufweist, wird der Verbindungsvorgang abgebrochen.
Hinweis: Diese Funktion kann unter Windows zufällig fehlschlagen. Erwägen Sie die Verwendung der Ereignisschleife und des Signals connected(), wenn Ihre Software unter Windows ausgeführt werden soll.
Siehe auch connectToHost() und connected().
[virtual]
bool QAbstractSocket::waitForDisconnected(int msecs = 30000)
Wartet, bis der Socket die Verbindung getrennt hat, bis zu msecs Millisekunden. Wenn die Verbindung erfolgreich getrennt wurde, gibt diese Funktion true
zurück, andernfalls false
(wenn der Vorgang eine Zeitüberschreitung hatte, ein Fehler auftrat oder die QAbstractSocket bereits getrennt wurde). Wenn false
zurückgegeben wird, können Sie error() aufrufen, um die Ursache des Fehlers zu ermitteln.
Im folgenden Beispiel wird bis zu einer Sekunde gewartet, bis eine Verbindung geschlossen wird:
socket->disconnectFromHost();if (socket->state() == QAbstractSocket::UnconnectedState || socket->waitForDisconnected(1000)) { qDebug("Disconnected!"); }
Wenn msecs -1 ist, wird diese Funktion nicht abgebrochen.
Hinweis: Diese Funktion kann unter Windows zufällig fehlschlagen. Erwägen Sie die Verwendung der Ereignisschleife und des Signals disconnected(), wenn Ihre Software unter Windows ausgeführt werden soll.
Siehe auch disconnectFromHost() und close().
[override virtual]
bool QAbstractSocket::waitForReadyRead(int msecs = 30000)
Reimplements: QIODevice::waitForReadyRead(int msecs).
Diese Funktion blockiert, bis neue Daten zum Lesen verfügbar sind und das Signal readyRead() ausgegeben wurde. Die Funktion führt nach msecs Millisekunden eine Zeitüberschreitung durch; die Standardzeitüberschreitung beträgt 30000 Millisekunden.
Die Funktion gibt true
zurück, wenn das Signal readyRead() ausgegeben wurde und neue Daten zum Lesen zur Verfügung stehen; andernfalls gibt sie false
zurück (wenn ein Fehler aufgetreten ist oder der Vorgang eine Zeitüberschreitung hatte).
Hinweis: Diese Funktion kann unter Windows zufällig fehlschlagen. Erwägen Sie die Verwendung der Ereignisschleife und des Signals readyRead(), wenn Ihre Software unter Windows ausgeführt werden soll.
Siehe auch waitForBytesWritten().
[override virtual protected]
qint64 QAbstractSocket::writeData(const char *data, qint64 size)
Reimplements: QIODevice::writeData(const char *data, qint64 maxSize).
© 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.