QAbstractSocket Class
La clase QAbstractSocket proporciona la funcionalidad base común a todos los tipos de socket. Más...
| Cabecera: | #include <QAbstractSocket> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Network)target_link_libraries(mytarget PRIVATE Qt6::Network) |
| qmake: | QT += network |
| Hereda: | QIODevice |
| Heredado por: |
- Lista de todos los miembros, incluyendo los heredados
- QAbstractSocket es parte de la API de Programación de Redes.
Nota: Todas las funciones de esta clase son reentrantes.
Tipos Públicos
| 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 } |
Funciones Públicas
| 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) |
Funciones Públicas Reimplementadas
| 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 |
Señales
| void | connected() |
| void | disconnected() |
| void | errorOccurred(QAbstractSocket::SocketError socketError) |
| void | hostFound() |
| void | proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator) |
| void | stateChanged(QAbstractSocket::SocketState socketState) |
Funciones protegidas
| 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) |
Funciones protegidas reimplementadas
| 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 |
Descripción Detallada
QAbstractSocket es la clase base para QTcpSocket y QUdpSocket y contiene toda la funcionalidad común de estas dos clases. Si necesitas un socket, tienes dos opciones:
- Instanciar QTcpSocket o QUdpSocket.
- Crear un descriptor de socket nativo, instanciar QAbstractSocket, y llamar a setSocketDescriptor() para envolver el socket nativo.
TCP (Transmission Control Protocol) es un protocolo de transporte fiable, orientado al flujo y a la conexión. UDP (User Datagram Protocol) es un protocolo no fiable, orientado a datagramas y sin conexión. En la práctica, esto significa que TCP es más adecuado para la transmisión continua de datos, mientras que UDP, más ligero, puede utilizarse cuando la fiabilidad no es importante.
La API de QAbstractSocket unifica la mayoría de las diferencias entre los dos protocolos. Por ejemplo, aunque UDP no tiene conexión, connectToHost() establece una conexión virtual para sockets UDP, permitiendo usar QAbstractSocket más o menos de la misma forma independientemente del protocolo subyacente. Internamente, QAbstractSocket recuerda la dirección y puerto pasados a connectToHost(), y funciones como read() y write() usan estos valores.
En cualquier momento, QAbstractSocket tiene un estado (devuelto por state()). El estado inicial es UnconnectedState. Después de llamar a connectToHost(), el socket entra primero en HostLookupState. Si se encuentra el host, QAbstractSocket entra en ConnectingState y emite la señal hostFound(). Cuando se ha establecido la conexión, entra en ConnectedState y emite connected(). Si ocurre un error en cualquier etapa, se emite errorOccurred(). Cada vez que cambia el estado, se emite stateChanged(). Por comodidad, isValid() devuelve true si el socket está listo para leer y escribir, pero ten en cuenta que el estado del socket debe ser ConnectedState antes de que se pueda leer y escribir.
Lee o escribe datos llamando a read() o write(), o usa las funciones de conveniencia readLine() y readAll(). QAbstractSocket también hereda getChar(), putChar(), y ungetChar() de QIODevice, que trabajan con bytes individuales. La señal bytesWritten() se emite cuando se han escrito datos en el socket. Ten en cuenta que Qt no limita el tamaño del búfer de escritura. Puedes monitorizar su tamaño escuchando esta señal.
La señal readyRead() se emite cada vez que llega un nuevo trozo de datos. bytesAvailable() devuelve el número de bytes disponibles para leer. Normalmente, conectarías la señal readyRead() a una ranura y leerías todos los datos disponibles allí. Si no lees todos los datos a la vez, los datos restantes seguirán estando disponibles más tarde, y cualquier nuevo dato entrante se añadirá al buffer de lectura interno de QAbstractSocket. Para limitar el tamaño del búfer de lectura, llama a setReadBufferSize().
Para cerrar el socket, llamar a disconnectFromHost(). QAbstractSocket entra en QAbstractSocket::ClosingState. Después de que todos los datos pendientes han sido escritos en el socket, QAbstractSocket realmente cierra el socket, entra en QAbstractSocket::UnconnectedState, y emite disconnected(). Si desea abortar una conexión inmediatamente, descartando todos los datos pendientes, llame a abort() en su lugar. Si el host remoto cierra la conexión, QAbstractSocket emitirá errorOccurred(QAbstractSocket::RemoteHostClosedError), durante el cual el estado del socket seguirá siendo ConnectedState, y entonces se emitirá la señal disconnected().
El puerto y la dirección del peer conectado se obtiene llamando a peerPort() y peerAddress(). peerName() devuelve el nombre de host del par, tal y como se pasó a connectToHost(). localPort() y localAddress() devuelven el puerto y la dirección del socket local.
QAbstractSocket provee un conjunto de funciones que suspenden la llamada hasta que ciertas señales son emitidas. Estas funciones pueden ser usadas para implementar sockets bloqueantes:
- waitForConnected() bloquea hasta que se haya establecido una conexión.
- waitForReadyRead() bloquea hasta que haya nuevos datos disponibles para lectura.
- waitForBytesWritten() bloquea hasta que una carga de datos ha sido escrita en el socket.
- waitForDisconnected() se bloquea hasta que se cierra la conexión.
Mostramos un ejemplo:
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; }
Si waitForReadyRead() devuelve false, la conexión se ha cerrado o se ha producido un error.
Programar con un socket bloqueante es radicalmente diferente a programar con un socket no bloqueante. Un socket bloqueante no requiere un bucle de eventos y normalmente conduce a un código más simple. Sin embargo, en una aplicación GUI, los sockets bloqueantes sólo deberían usarse en hilos no GUI, para evitar congelar la interfaz de usuario. Ver los ejemplos fortuneclient y blockingfortuneclient para una visión general de ambos enfoques.
Nota: Desaconsejamos el uso de las funciones de bloqueo junto con señales. Debe utilizarse una de las dos posibilidades.
QAbstractSocket puede usarse con los operadores de flujo de QTextStream y QDataStream(operator<<() y operator>>()). Hay un problema a tener en cuenta, sin embargo: Debes asegurarte de que hay suficientes datos disponibles antes de intentar leerlos usando operator>>().
Véase también QNetworkAccessManager y QTcpServer.
Documentación de tipos de miembros
enum QAbstractSocket::BindFlag
flags QAbstractSocket::BindMode
Este enum describe las diferentes banderas que puedes pasar para modificar el comportamiento de QAbstractSocket::bind().
| Constante | Valor | Descripción |
|---|---|---|
QAbstractSocket::ShareAddress | 0x1 | Permite a otros servicios enlazarse a la misma dirección y puerto. Esto es útil cuando varios procesos comparten la carga de un único servicio escuchando la misma dirección y puerto (por ejemplo, un servidor web con varios escuchadores pre-forked puede mejorar mucho el tiempo de respuesta). Sin embargo, dado que cualquier servicio puede reenlazarse, esta opción está sujeta a ciertas consideraciones de seguridad. Tenga en cuenta que combinando esta opción con ReuseAddressHint, también permitirá a su servicio reenlazar una dirección compartida existente. En Unix, esto es equivalente a la opción de socket SO_REUSEADDR. En Windows, este es el comportamiento por defecto, por lo que esta opción se ignora. |
QAbstractSocket::DontShareAddress | 0x2 | Vincula la dirección y el puerto exclusivamente, de forma que no se permita a ningún otro servicio volver a vincularlos. Pasando esta opción a QAbstractSocket::bind(), se garantiza que en caso de éxito, su servicio es el único que escucha la dirección y el puerto. No se permite a ningún servicio volver a enlazar, incluso si pasan ReuseAddressHint. Esta opción proporciona más seguridad que ShareAddress, pero en ciertos sistemas operativos, requiere que ejecute el servidor con privilegios de administrador. En Unix y macOS, no compartir es el comportamiento predeterminado para vincular una dirección y un puerto, por lo que esta opción se ignora. En Windows, esta opción utiliza la opción de socket SO_EXCLUSIVEADDRUSE. |
QAbstractSocket::ReuseAddressHint | 0x4 | Proporciona una sugerencia a QAbstractSocket para que intente volver a enlazar el servicio incluso si la dirección y el puerto ya están enlazados por otro socket. En Windows y Unix, es equivalente a la opción de socket SO_REUSEADDR. |
QAbstractSocket::DefaultForPlatform | 0x0 | La opción por defecto para la plataforma actual. En Unix y macOS, equivale a (DontShareAddress + ReuseAddressHint), y en Windows, equivale a ShareAddress. |
El tipo BindMode es un typedef para QFlags<BindFlag>. Almacena una combinación OR de valores BindFlag.
enum QAbstractSocket::NetworkLayerProtocol
Este enum describe los valores de protocolo de capa de red utilizados en Qt.
| Constante | Valor | Descripción |
|---|---|---|
QAbstractSocket::IPv4Protocol | 0 | IPv4 |
QAbstractSocket::IPv6Protocol | 1 | IPv6 |
QAbstractSocket::AnyIPProtocol | 2 | IPv4 o IPv6 |
QAbstractSocket::UnknownNetworkLayerProtocol | -1 | Distinto de IPv4 e IPv6 |
Véase también QHostAddress::protocol().
enum QAbstractSocket::PauseMode
flags QAbstractSocket::PauseModes
Este enum describe el comportamiento de cuando el socket debe retener la continuación de la transferencia de datos. La única notificación soportada actualmente es QSslSocket::sslErrors().
| Constante | Valor | Descripción |
|---|---|---|
QAbstractSocket::PauseNever | 0x0 | No pausar la transferencia de datos en el socket. Este es el valor por defecto y coincide con el comportamiento de Qt 4. |
QAbstractSocket::PauseOnSslErrors | 0x1 | Pausa la transferencia de datos en el socket al recibir una notificación de error SSL. POR EJEMPLO QSslSocket::sslErrors(). |
El tipo PauseModes es un typedef para QFlags<PauseMode>. Almacena una combinación OR de valores PauseMode.
enum QAbstractSocket::SocketError
Este enum describe los errores de socket que pueden ocurrir.
| Constante | Valor | Descripción |
|---|---|---|
QAbstractSocket::ConnectionRefusedError | 0 | La conexión fue rechazada por el peer (o expiró). |
QAbstractSocket::RemoteHostClosedError | 1 | El host remoto cerró la conexión. Tenga en cuenta que el socket del cliente (es decir, este socket) se cerrará después de que se haya enviado la notificación de cierre remoto. |
QAbstractSocket::HostNotFoundError | 2 | No se ha encontrado la dirección del host. |
QAbstractSocket::SocketAccessError | 3 | La operación de socket falló porque la aplicación carecía de los privilegios necesarios. |
QAbstractSocket::SocketResourceError | 4 | El sistema local se quedó sin recursos (por ejemplo, demasiados sockets). |
QAbstractSocket::SocketTimeoutError | 5 | El tiempo de espera de la operación de socket ha expirado. |
QAbstractSocket::DatagramTooLargeError | 6 | El datagrama era mayor que el límite del sistema operativo (que puede ser tan bajo como 8192 bytes). |
QAbstractSocket::NetworkError | 7 | Se ha producido un error en la red (por ejemplo, el cable de red se ha desconectado accidentalmente). |
QAbstractSocket::AddressInUseError | 8 | La dirección especificada en QAbstractSocket::bind() ya está en uso y se estableció como exclusiva. |
QAbstractSocket::SocketAddressNotAvailableError | 9 | La dirección especificada en QAbstractSocket::bind() no pertenece al host. |
QAbstractSocket::UnsupportedSocketOperationError | 10 | La operación de socket solicitada no está soportada por el sistema operativo local (por ejemplo, falta de soporte IPv6). |
QAbstractSocket::ProxyAuthenticationRequiredError | 12 | El socket está utilizando un proxy, y el proxy requiere autenticación. |
QAbstractSocket::SslHandshakeFailedError | 13 | El handshake SSL/TLS ha fallado, por lo que se ha cerrado la conexión (sólo se utiliza en QSslSocket) |
QAbstractSocket::UnfinishedSocketOperationError | 11 | Usado sólo por QAbstractSocketEngine, La última operación intentada no ha terminado aún (aún en progreso en segundo plano). |
QAbstractSocket::ProxyConnectionRefusedError | 14 | No se pudo contactar con el servidor proxy porque se denegó la conexión a ese servidor |
QAbstractSocket::ProxyConnectionClosedError | 15 | La conexión con el servidor proxy se cerró inesperadamente (antes de que se estableciera la conexión con el peer final) |
QAbstractSocket::ProxyConnectionTimeoutError | 16 | La conexión con el servidor proxy expiró o el servidor proxy dejó de responder en la fase de autenticación. |
QAbstractSocket::ProxyNotFoundError | 17 | No se ha encontrado la dirección proxy establecida con setProxy() (o el proxy de la aplicación). |
QAbstractSocket::ProxyProtocolError | 18 | La negociación de la conexión con el servidor proxy ha fallado porque no se ha podido comprender la respuesta del servidor proxy. |
QAbstractSocket::OperationError | 19 | Se intentó una operación mientras el socket estaba en un estado que no lo permitía. |
QAbstractSocket::SslInternalError | 20 | La biblioteca SSL que se está utilizando ha informado de un error interno. Esto es probablemente el resultado de una mala instalación o mala configuración de la biblioteca. |
QAbstractSocket::SslInvalidUserDataError | 21 | Se proporcionaron datos no válidos (certificado, clave, cifrado, etc.) y su uso provocó un error en la biblioteca SSL. |
QAbstractSocket::TemporaryError | 22 | Se ha producido un error temporal (por ejemplo, la operación se bloquearía y el socket no es bloqueante). |
QAbstractSocket::UnknownSocketError | -1 | Se ha producido un error no identificado. |
Véase también QAbstractSocket::error() y QAbstractSocket::errorOccurred().
enum QAbstractSocket::SocketOption
Este enum representa las opciones que se pueden establecer en un socket. Si se desea, se pueden establecer después de haber recibido la señal connected() del socket o después de haber recibido un nuevo socket de un QTcpServer.
| Constante | Valor | Descripción |
|---|---|---|
QAbstractSocket::LowDelayOption | 0 | Intenta optimizar el socket para una baja latencia. Para un QTcpSocket esto activaría la opción TCP_NODELAY y desactivaría el algoritmo de Nagle. Establézcalo a 1 para habilitarlo. |
QAbstractSocket::KeepAliveOption | 1 | Establézcalo a 1 para activar la opción de socket SO_KEEPALIVE. |
QAbstractSocket::MulticastTtlOption | 2 | Póngalo a un valor entero para activar la opción de socket IP_MULTICAST_TTL (TTL para datagramas multicast). |
QAbstractSocket::MulticastLoopbackOption | 3 | Establézcalo a 1 para activar la opción de socket IP_MULTICAST_LOOP (multicast loopback). |
QAbstractSocket::TypeOfServiceOption | 4 | Esta opción no es compatible con Windows. Corresponde a la opción de socket IP_TOS. Para conocer los valores posibles, consulte la tabla siguiente. |
QAbstractSocket::SendBufferSizeSocketOption | 5 | Establece el tamaño del buffer de envío del socket en bytes a nivel de SO. Corresponde a la opción de socket SO_SNDBUF. Esta opción no afecta a los buffers QIODevice o QAbstractSocket. Este valor enum ha sido introducido en Qt 5.3. |
QAbstractSocket::ReceiveBufferSizeSocketOption | 6 | Establece el tamaño del buffer de recepción del socket en bytes a nivel de SO. Corresponde a la opción de socket SO_RCVBUF. Esta opción no afecta a los buffers QIODevice o QAbstractSocket (ver setReadBufferSize()). Este valor enum se ha introducido en Qt 5.3. |
QAbstractSocket::PathMtuSocketOption | 7 | Recupera el valor de la Unidad de Transmisión Máxima de Ruta (PMTU) actualmente conocido por la pila IP, si existe. Algunas pilas IP también permiten establecer la MTU para la transmisión. Este valor enum se introdujo en Qt 5.11. |
QAbstractSocket::KeepAliveIdleOption | 8 | El tiempo en segundos que la conexión necesita permanecer inactiva antes de que TCP comience a enviar sondas keepalive si KeepAliveOption está habilitado. Este valor enum se introdujo en Qt 6.11. |
QAbstractSocket::KeepAliveIntervalOption | 9 | El tiempo en segundos entre sondas keepalive individuales, si KeepAliveOption está habilitado. Esta opción no está soportada en todos los sistemas operativos. Este valor enum se introdujo en Qt 6.11. |
QAbstractSocket::KeepAliveCountOption | 10 | El número máximo de sondas keepalive a enviar antes de que TCP pierda la conexión, si KeepAliveOption está habilitado. Esta opción no está soportada en todos los sistemas operativos. Este valor enum se introdujo en Qt 6.11. |
Los valores posibles para TypeOfServiceOption son:
| Valor | Descripción |
|---|---|
| 224 | Control de red |
| 192 | Control de red |
| 160 | CRITIC/ECP |
| 128 | Anulación de flash |
| 96 | Flash |
| 64 | Inmediato |
| 32 | Prioridad |
| 0 | Rutina |
Véase también QAbstractSocket::setSocketOption() y QAbstractSocket::socketOption().
enum QAbstractSocket::SocketState
Este enum describe los diferentes estados en los que puede estar un socket.
| Constante | Valor | Descripción |
|---|---|---|
QAbstractSocket::UnconnectedState | 0 | El socket no está conectado. |
QAbstractSocket::HostLookupState | 1 | El socket está realizando una búsqueda de nombre de host. |
QAbstractSocket::ConnectingState | 2 | El socket ha comenzado a establecer una conexión. |
QAbstractSocket::ConnectedState | 3 | Se ha establecido una conexión. |
QAbstractSocket::BoundState | 4 | El socket está vinculado a una dirección y un puerto. |
QAbstractSocket::ClosingState | 6 | El socket está a punto de cerrarse (los datos pueden estar aún esperando a ser escritos). |
QAbstractSocket::ListeningState | 5 | Sólo para uso interno. |
Véase también QAbstractSocket::state().
enum QAbstractSocket::SocketType
Este enum describe el protocolo de la capa de transporte.
| Constante | Valor | Descripción |
|---|---|---|
QAbstractSocket::TcpSocket | 0 | TCP |
QAbstractSocket::UdpSocket | 1 | UDP |
QAbstractSocket::SctpSocket | 2 | SCTP |
QAbstractSocket::UnknownSocketType | -1 | Distintos de TCP, UDP y SCTP |
Véase también QAbstractSocket::socketType().
Documentación de las funciones miembro
QAbstractSocket::QAbstractSocket(QAbstractSocket::SocketType socketType, QObject *parent)
Crea un nuevo socket abstracto de tipo socketType. El argumento parent se pasa al constructor de QObject.
Véase también socketType(), QTcpSocket, y QUdpSocket.
[virtual noexcept] QAbstractSocket::~QAbstractSocket()
Destruye el enchufe.
void QAbstractSocket::abort()
Aborta la conexión actual y reinicia el socket. A diferencia de disconnectFromHost(), esta función cierra inmediatamente el socket, descartando cualquier dato pendiente en el búfer de escritura.
Véase también disconnectFromHost() y close().
[virtual] bool QAbstractSocket::bind(const QHostAddress &address, quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform)
Se vincula a address en el puerto port, utilizando el BindMode mode .
Para los sockets UDP, después del enlace, la señal QUdpSocket::readyRead() se emite cada vez que llega un datagrama UDP a la dirección y puerto especificados. Por lo tanto, esta función es útil para escribir servidores UDP.
Para sockets TCP, esta función se puede utilizar para especificar qué interfaz utilizar para una conexión saliente, lo que es útil en caso de múltiples interfaces de red.
Por defecto, el socket se vincula utilizando la dirección DefaultForPlatform BindMode . Si no se especifica un puerto, se elige un puerto aleatorio.
En caso de éxito, la función devuelve true y el socket entra en BoundState; en caso contrario devuelve false.
bool QAbstractSocket::bind(quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform)
Se enlaza a QHostAddress:Any en el puerto port, utilizando el BindMode mode .
Por defecto, el socket se enlaza utilizando DefaultForPlatform BindMode . Si no se especifica un puerto, se elige un puerto aleatorio.
Se trata de una función sobrecargada.
[since 6.2] bool QAbstractSocket::bind(QHostAddress::SpecialAddress addr, quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform)
Se enlaza a la dirección especial addr en el puerto port, utilizando la dirección BindMode mode .
Por defecto, el socket se enlaza utilizando la dirección DefaultForPlatform BindMode . Si no se especifica un puerto, se elige un puerto aleatorio.
Esta es una función sobrecargada.
Esta función se introdujo en Qt 6.2.
[override virtual] qint64 QAbstractSocket::bytesAvailable() const
Reimplementa: QIODevice::bytesAvailable() const.
Devuelve el número de bytes entrantes que están esperando ser leídos.
Véase también bytesToWrite() y read().
[override virtual] qint64 QAbstractSocket::bytesToWrite() const
Reimplementa: QIODevice::bytesToWrite() const.
Devuelve el número de bytes que están esperando a ser escritos. Los bytes se escriben cuando el control vuelve al bucle de eventos o cuando se llama a flush().
Véase también bytesAvailable() y flush().
[override virtual] void QAbstractSocket::close()
Reimplementa: QIODevice::close().
Cierra el dispositivo de E/S para el socket y llama a disconnectFromHost() para cerrar la conexión del socket.
Ver QIODevice::close() para una descripción de las acciones que ocurren cuando se cierra un dispositivo de E/S.
Véase también abort().
[virtual] void QAbstractSocket::connectToHost(const QString &hostName, quint16 port, QIODeviceBase::OpenMode openMode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol)
Intenta establecer una conexión con hostName en la dirección port. El parámetro protocol puede utilizarse para especificar qué protocolo de red utilizar (por ejemplo, IPv4 o IPv6).
El socket se abre en el openMode dado y primero entra en HostLookupState, luego realiza una búsqueda de nombre de host en hostName. Si la búsqueda tiene éxito, se emite hostFound() y QAbstractSocket entra en ConnectingState. A continuación, intenta conectarse a la dirección o direcciones devueltas por la búsqueda. Finalmente, si se establece una conexión, QAbstractSocket entra en ConnectedState y emite connected().
En cualquier momento, el socket puede emitir errorOccurred() para indicar que se ha producido un error.
hostName puede ser una dirección IP en forma de cadena (por ejemplo, "43.195.83.32"), o puede ser un nombre de host (por ejemplo, "ejemplo.com"). QAbstractSocket hará una búsqueda sólo si es necesario. port está en orden nativo de bytes.
Véase también state(), peerName(), peerAddress(), peerPort() y waitForConnected().
void QAbstractSocket::connectToHost(const QHostAddress &address, quint16 port, QIODeviceBase::OpenMode openMode = ReadWrite)
Intenta establecer una conexión con address en el puerto port.
Se trata de una función sobrecargada.
[signal] void QAbstractSocket::connected()
Esta señal se emite después de que se haya llamado a connectToHost() y se haya establecido con éxito una conexión.
Nota: En algunos sistemas operativos la señal connected() puede ser emitida directamente desde la llamada a connectToHost() para conexiones al localhost.
Véase también connectToHost() y disconnected().
[virtual] void QAbstractSocket::disconnectFromHost()
Intenta cerrar el socket. Si hay datos pendientes esperando a ser escritos, QAbstractSocket entrará en ClosingState y esperará hasta que todos los datos hayan sido escritos. Finalmente, entrará en UnconnectedState y emitirá la señal disconnected().
Véase también connectToHost().
[signal] void QAbstractSocket::disconnected()
Esta señal se emite cuando la toma se ha desconectado.
Atención: Si necesita eliminar la sender() de esta señal en un zócalo conectado a ella, utilice la función deleteLater().
Véase también connectToHost(), disconnectFromHost() y abort().
QAbstractSocket::SocketError QAbstractSocket::error() const
Devuelve el tipo de error que se produjo por última vez.
Véase también state() y errorString().
[signal] void QAbstractSocket::errorOccurred(QAbstractSocket::SocketError socketError)
Esta señal se emite tras producirse un error. El parámetro socketError describe el tipo de error que se ha producido.
Cuando se emite esta señal, es posible que el socket no esté listo para un intento de reconexión. En ese caso, los intentos de reconexión deben hacerse desde el bucle de eventos. Por ejemplo, usa QChronoTimer::singleShot() con 0ns como tiempo de espera.
QAbstractSocket::SocketError no es un metatipo registrado, por lo que para conexiones en cola, tendrás que registrarlo con Q_DECLARE_METATYPE() y qRegisterMetaType().
Véase también error(), errorString(), y Creación de tipos Qt personalizados.
bool QAbstractSocket::flush()
Esta función escribe tanto como sea posible desde el búfer de escritura interno al socket de red subyacente, sin bloquear. Si se ha escrito algún dato, esta función devuelve true; en caso contrario devuelve false.
Llame a esta función si necesita que QAbstractSocket comience a enviar datos del buffer inmediatamente. El número de bytes escritos con éxito depende del sistema operativo. En la mayoría de los casos, no es necesario llamar a esta función, porque QAbstractSocket empezará a enviar datos automáticamente una vez que el control vuelva al bucle de eventos. En ausencia de un bucle de eventos, llame a waitForBytesWritten() en su lugar.
Véase también write() y waitForBytesWritten().
[signal] void QAbstractSocket::hostFound()
Esta señal se emite después de que connectToHost() haya sido llamado y la búsqueda de host haya tenido éxito.
Nota: Desde Qt 4.6.3 QAbstractSocket puede emitir hostFound() directamente desde la llamada a connectToHost() ya que un resultado DNS podría haber sido almacenado en caché.
Véase también connected().
[override virtual] bool QAbstractSocket::isSequential() const
Reimplementa: QIODevice::isSequential() const.
bool QAbstractSocket::isValid() const
Devuelve true si el socket es válido y está listo para su uso; en caso contrario devuelve false.
Nota: El estado del socket debe ser ConnectedState antes de que se pueda leer y escribir.
Véase también state().
QHostAddress QAbstractSocket::localAddress() const
Devuelve la dirección del host del socket local si está disponible; en caso contrario devuelve QHostAddress::Null.
Normalmente es la dirección IP principal del host, pero puede ser QHostAddress::LocalHost (127.0.0.1) para conexiones al host local.
Véase también localPort(), peerAddress() y setLocalAddress().
quint16 QAbstractSocket::localPort() const
Devuelve el número de puerto del host (en orden nativo de bytes) del socket local si está disponible; en caso contrario devuelve 0.
Véase también localAddress(), peerPort() y setLocalPort().
QAbstractSocket::PauseModes QAbstractSocket::pauseMode() const
Devuelve el modo de pausa de este socket.
Véase también setPauseMode() y resume().
QHostAddress QAbstractSocket::peerAddress() const
Devuelve la dirección del peer conectado si el socket está en ConnectedState; en caso contrario devuelve QHostAddress::Null.
Véase también peerName(), peerPort(), localAddress(), y setPeerAddress().
QString QAbstractSocket::peerName() const
Devuelve el nombre del par especificado por connectToHost(), o un QString vacío si no se ha llamado a connectToHost().
Véase también peerAddress(), peerPort() y setPeerName().
quint16 QAbstractSocket::peerPort() const
Devuelve el puerto del peer conectado si el socket está en ConnectedState; en caso contrario devuelve 0.
Véase también peerAddress(), localPort(), y setPeerPort().
QString QAbstractSocket::protocolTag() const
Devuelve la etiqueta de protocolo para este socket. Si la etiqueta de protocolo está definida, se pasa a QNetworkProxyQuery cuando se crea internamente para indicar la etiqueta de protocolo que se va a utilizar.
Véase también setProtocolTag() y QNetworkProxyQuery.
QNetworkProxy QAbstractSocket::proxy() const
Devuelve el proxy de red para este socket. Por defecto se utiliza QNetworkProxy::DefaultProxy, lo que significa que este socket consultará la configuración del proxy por defecto para la aplicación.
Ver también setProxy(), QNetworkProxy, y QNetworkProxyFactory.
[signal] void QAbstractSocket::proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator)
Esta señal puede emitirse cuando se utiliza un proxy que requiere autenticación. El objeto authenticator puede entonces ser rellenado con los detalles requeridos para permitir la autenticación y continuar la conexión.
Nota: No es posible utilizar una QueuedConnection para conectarse a esta señal, ya que la conexión fallará si el autenticador no ha sido rellenado con nueva información cuando la señal retorne.
Véase también QAuthenticator y QNetworkProxy.
qint64 QAbstractSocket::readBufferSize() const
Devuelve el tamaño del búfer de lectura interno. Esto limita la cantidad de datos que el cliente puede recibir antes de llamar a read() o readAll().
Un tamaño de buffer de lectura de 0 (por defecto) significa que el buffer no tiene límite de tamaño, asegurando que no se pierda ningún dato.
Véase también setReadBufferSize() y read().
[override virtual protected] qint64 QAbstractSocket::readData(char *data, qint64 maxSize)
Reimplementa: QIODevice::readData(char *data, qint64 maxSize).
[override virtual protected] qint64 QAbstractSocket::readLineData(char *data, qint64 maxlen)
Reimplementa: QIODevice::readLineData(char *data, qint64 maxSize).
[virtual] void QAbstractSocket::resume()
Continúa la transferencia de datos en el socket. Este método sólo debe utilizarse después de que el socket haya sido configurado para pausarse ante notificaciones y se haya recibido una notificación. La única notificación soportada actualmente es QSslSocket::sslErrors(). Llamar a este método si el socket no está en pausa resulta en un comportamiento indefinido.
Véase también pauseMode() y setPauseMode().
[protected] void QAbstractSocket::setLocalAddress(const QHostAddress &address)
Establece la dirección en el lado local de una conexión a address.
Puedes llamar a esta función en una subclase de QAbstractSocket para cambiar el valor de retorno de la función localAddress() después de que se haya establecido una conexión. Esta función es comúnmente utilizada por conexiones proxy para la configuración de conexiones virtuales.
Tenga en cuenta que esta función no vincula la dirección local del socket antes de una conexión (por ejemplo, QAbstractSocket::bind()).
Véase también localAddress(), setLocalPort(), y setPeerAddress().
[protected] void QAbstractSocket::setLocalPort(quint16 port)
Establece el puerto en el lado local de una conexión a port.
Puedes llamar a esta función en una subclase de QAbstractSocket para cambiar el valor de retorno de la función localPort() después de que se haya establecido una conexión. Esta función es comúnmente utilizada por conexiones proxy para la configuración de conexiones virtuales.
Tenga en cuenta que esta función no vincula el puerto local del socket antes de una conexión (por ejemplo, QAbstractSocket::bind()).
Véase también localPort(), localAddress(), setLocalAddress(), y setPeerPort().
void QAbstractSocket::setPauseMode(QAbstractSocket::PauseModes pauseMode)
Controla si se debe hacer una pausa al recibir una notificación. El parámetro pauseMode especifica las condiciones en las que el socket debe ser pausado. La única notificación soportada actualmente es QSslSocket::sslErrors(). Si se establece en PauseOnSslErrors, la transferencia de datos en el socket se pausará y necesitará ser activada explícitamente de nuevo llamando a resume(). Por defecto, esta opción está establecida a PauseNever. Esta opción debe ser llamada antes de conectarse al servidor, de lo contrario resultará en un comportamiento indefinido.
Véase también pauseMode() y resume().
[protected] void QAbstractSocket::setPeerAddress(const QHostAddress &address)
Establece la dirección del lado remoto de la conexión en address.
Puedes llamar a esta función en una subclase de QAbstractSocket para cambiar el valor de retorno de la función peerAddress() después de que se haya establecido una conexión. Esta función es comúnmente utilizada por conexiones proxy para la configuración de conexiones virtuales.
Véase también peerAddress(), setPeerPort(), y setLocalAddress().
[protected] void QAbstractSocket::setPeerName(const QString &name)
Establece el nombre de host del peer remoto en name.
Puedes llamar a esta función en una subclase de QAbstractSocket para cambiar el valor de retorno de la función peerName() después de que se haya establecido una conexión. Esta función es comúnmente utilizada por conexiones proxy para la configuración de conexiones virtuales.
Véase también peerName().
[protected] void QAbstractSocket::setPeerPort(quint16 port)
Establece el puerto del lado remoto de la conexión en port.
Puedes llamar a esta función en una subclase de QAbstractSocket para cambiar el valor de retorno de la función peerPort() después de que se haya establecido una conexión. Esta función es comúnmente utilizada por conexiones proxy para la configuración de conexiones virtuales.
Véase también peerPort(), setPeerAddress(), y setLocalPort().
void QAbstractSocket::setProtocolTag(const QString &tag)
Establece la etiqueta de protocolo para este socket en tag.
Véase también protocolTag().
void QAbstractSocket::setProxy(const QNetworkProxy &networkProxy)
Establece el proxy de red explícito para este socket en networkProxy.
Para desactivar el uso de un proxy para este socket, utiliza el tipo de proxy QNetworkProxy::NoProxy:
socket->setProxy(QNetworkProxy::NoProxy);
El valor por defecto para el proxy es QNetworkProxy::DefaultProxy, lo que significa que el socket utilizará la configuración de la aplicación: si se establece un proxy con QNetworkProxy::setApplicationProxy, utilizará ese; de lo contrario, si se establece una fábrica con QNetworkProxyFactory::setApplicationProxyFactory, consultará esa fábrica con el tipo QNetworkProxyQuery::TcpSocket.
Véase también proxy(), QNetworkProxy, y QNetworkProxyFactory::queryProxy().
[virtual] void QAbstractSocket::setReadBufferSize(qint64 size)
Establece el tamaño del búfer de lectura interno de QAbstractSocket en size bytes.
Si el tamaño del búfer está limitado a un cierto tamaño, QAbstractSocket no almacenará más que este tamaño de datos. Excepcionalmente, un tamaño de buffer de 0 significa que el buffer de lectura es ilimitado y todos los datos entrantes son almacenados en el buffer. Este es el valor por defecto.
Esta opción es útil si sólo lees los datos en ciertos momentos (por ejemplo, en una aplicación de streaming en tiempo real) o si quieres proteger tu socket contra la recepción de demasiados datos, lo que eventualmente puede causar que tu aplicación se quede sin memoria.
Sólo QTcpSocket utiliza el buffer interno de QAbstractSocket; QUdpSocket no utiliza ningún buffer, sino que confía en el buffer implícito proporcionado por el sistema operativo. Por ello, llamar a esta función en QUdpSocket no tiene ningún efecto.
Véase también readBufferSize() y read().
[virtual] bool QAbstractSocket::setSocketDescriptor(qintptr socketDescriptor, QAbstractSocket::SocketState socketState = ConnectedState, QIODeviceBase::OpenMode openMode = ReadWrite)
Inicializa QAbstractSocket con el descriptor de socket nativo socketDescriptor. Devuelve true si socketDescriptor es aceptado como un descriptor de socket válido; en caso contrario devuelve false. El socket se abre en el modo especificado por openMode, y entra en el estado de socket especificado por socketState. Los buffers de lectura y escritura se limpian, descartando cualquier dato pendiente.
Nota: No es posible inicializar dos sockets abstractos con el mismo descriptor de socket nativo.
Véase también socketDescriptor().
[protected] void QAbstractSocket::setSocketError(QAbstractSocket::SocketError socketError)
Establece el tipo de error que se produjo por última vez en socketError.
Véase también setSocketState() y setErrorString().
[virtual] void QAbstractSocket::setSocketOption(QAbstractSocket::SocketOption option, const QVariant &value)
Establece el option dado al valor descrito por value.
Nota: Dado que las opciones se establecen en un socket interno, las opciones sólo se aplican si el socket ha sido creado. Sólo se garantiza que esto ha ocurrido después de una llamada a bind(), o cuando connected() ha sido emitido.
Véase también socketOption().
[protected] void QAbstractSocket::setSocketState(QAbstractSocket::SocketState state)
Establece el estado del socket en state.
Véase también state().
[override virtual protected] qint64 QAbstractSocket::skipData(qint64 maxSize)
Reimplementa: QIODevice::skipData(qint64 maxSize).
[virtual] qintptr QAbstractSocket::socketDescriptor() const
Devuelve el descriptor de socket nativo del objeto QAbstractSocket si está disponible; en caso contrario devuelve -1.
Si el socket está usando QNetworkProxy, el descriptor devuelto puede no ser utilizable con funciones de socket nativas.
El descriptor de socket no está disponible cuando QAbstractSocket está en UnconnectedState.
Véase también setSocketDescriptor().
[virtual] QVariant QAbstractSocket::socketOption(QAbstractSocket::SocketOption option)
Devuelve el valor de la opción option.
Véase también setSocketOption().
QAbstractSocket::SocketType QAbstractSocket::socketType() const
Devuelve el tipo de socket (TCP, UDP u otro).
Véase también QTcpSocket y QUdpSocket.
QAbstractSocket::SocketState QAbstractSocket::state() const
Devuelve el estado del socket.
Véase también error().
[signal] void QAbstractSocket::stateChanged(QAbstractSocket::SocketState socketState)
Esta señal se emite cada vez que cambia el estado de QAbstractSocket. El parámetro socketState es el nuevo estado.
QAbstractSocket::SocketState no es un metatipo registrado, por lo que para conexiones en cola, tendrás que registrarlo con Q_DECLARE_METATYPE() y qRegisterMetaType().
Véase también state() y Creación de tipos Qt personalizados.
[override virtual] bool QAbstractSocket::waitForBytesWritten(int msecs = 30000)
Reimplementa: QIODevice::waitForBytesWritten(int msecs).
Esta función se bloquea hasta que se ha escrito al menos un byte en el socket y se ha emitido la señal bytesWritten(). La función agotará el tiempo de espera después de msecs milisegundos; el tiempo de espera por defecto es de 30000 milisegundos.
La función devuelve true si se emite la señal bytesWritten(); en caso contrario devuelve false (si se ha producido un error o la operación ha expirado).
Nota: Esta función puede fallar aleatoriamente en Windows. Considere utilizar el bucle de eventos y la señal bytesWritten() si su software se ejecutará en Windows.
Véase también waitForReadyRead().
[virtual] bool QAbstractSocket::waitForConnected(int msecs = 30000)
Espera hasta que el socket se conecta, hasta msecs milisegundos. Si se ha establecido la conexión, esta función devuelve true; en caso contrario devuelve false. En el caso de que devuelva false, puede llamar a error() para determinar la causa del error.
El siguiente ejemplo espera hasta un segundo a que se establezca una conexión:
socket->connectToHost("imap", 143);if (socket->waitForConnected(1000)) qDebug("Connected!");
Si msecs es -1, esta función no agotará el tiempo de espera.
Nota: Esta función puede esperar un poco más que msecs, dependiendo del tiempo que tarde en completar la búsqueda de host.
Nota: Múltiples llamadas a esta función no acumulan el tiempo. Si se agota el tiempo de espera de la función, se interrumpirá el proceso de conexión.
Nota: Esta función puede fallar aleatoriamente en Windows. Considere utilizar el bucle de eventos y la señal connected() si su software se ejecutará en Windows.
Véase también connectToHost() y connected().
[virtual] bool QAbstractSocket::waitForDisconnected(int msecs = 30000)
Espera hasta que el socket se haya desconectado, hasta msecs milisegundos. Si la conexión se ha desconectado con éxito, esta función devuelve true; en caso contrario devuelve false (si la operación ha expirado, si se ha producido un error, o si este QAbstractSocket ya está desconectado). En el caso de que devuelva false, puede llamar a error() para determinar la causa del error.
El siguiente ejemplo espera hasta un segundo a que se cierre una conexión:
socket->disconnectFromHost();if (socket->state() == QAbstractSocket::UnconnectedState || socket->waitForDisconnected(1000)) { qDebug("Disconnected!"); }
Si msecs es -1, esta función no agotará el tiempo de espera.
Nota: Esta función puede fallar aleatoriamente en Windows. Considere usar el bucle de eventos y la señal disconnected() si su software se ejecutará en Windows.
Véase también disconnectFromHost() y close().
[override virtual] bool QAbstractSocket::waitForReadyRead(int msecs = 30000)
Reimplementa: QIODevice::waitForReadyRead(int msecs).
Esta función se bloquea hasta que hay nuevos datos disponibles para lectura y se ha emitido la señal readyRead(). La función expirará después de msecs milisegundos; el tiempo de espera por defecto es de 30000 milisegundos.
La función devuelve true si se emite la señal readyRead() y hay nuevos datos disponibles para su lectura; en caso contrario, devuelve false (si se ha producido un error o la operación ha expirado).
Nota: Esta función puede fallar aleatoriamente en Windows. Considere utilizar el bucle de eventos y la señal readyRead() si su software se ejecutará en Windows.
Véase también waitForBytesWritten().
[override virtual protected] qint64 QAbstractSocket::writeData(const char *data, qint64 size)
Reimplementa: 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.