En esta página

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:

QTcpSocket y QUdpSocket

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:

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:

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().

ConstanteValorDescripción
QAbstractSocket::ShareAddress0x1Permite 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::DontShareAddress0x2Vincula 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::ReuseAddressHint0x4Proporciona 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::DefaultForPlatform0x0La 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.

ConstanteValorDescripción
QAbstractSocket::IPv4Protocol0IPv4
QAbstractSocket::IPv6Protocol1IPv6
QAbstractSocket::AnyIPProtocol2IPv4 o IPv6
QAbstractSocket::UnknownNetworkLayerProtocol-1Distinto 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().

ConstanteValorDescripción
QAbstractSocket::PauseNever0x0No pausar la transferencia de datos en el socket. Este es el valor por defecto y coincide con el comportamiento de Qt 4.
QAbstractSocket::PauseOnSslErrors0x1Pausa 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.

ConstanteValorDescripción
QAbstractSocket::ConnectionRefusedError0La conexión fue rechazada por el peer (o expiró).
QAbstractSocket::RemoteHostClosedError1El 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::HostNotFoundError2No se ha encontrado la dirección del host.
QAbstractSocket::SocketAccessError3La operación de socket falló porque la aplicación carecía de los privilegios necesarios.
QAbstractSocket::SocketResourceError4El sistema local se quedó sin recursos (por ejemplo, demasiados sockets).
QAbstractSocket::SocketTimeoutError5El tiempo de espera de la operación de socket ha expirado.
QAbstractSocket::DatagramTooLargeError6El datagrama era mayor que el límite del sistema operativo (que puede ser tan bajo como 8192 bytes).
QAbstractSocket::NetworkError7Se ha producido un error en la red (por ejemplo, el cable de red se ha desconectado accidentalmente).
QAbstractSocket::AddressInUseError8La dirección especificada en QAbstractSocket::bind() ya está en uso y se estableció como exclusiva.
QAbstractSocket::SocketAddressNotAvailableError9La dirección especificada en QAbstractSocket::bind() no pertenece al host.
QAbstractSocket::UnsupportedSocketOperationError10La operación de socket solicitada no está soportada por el sistema operativo local (por ejemplo, falta de soporte IPv6).
QAbstractSocket::ProxyAuthenticationRequiredError12El socket está utilizando un proxy, y el proxy requiere autenticación.
QAbstractSocket::SslHandshakeFailedError13El handshake SSL/TLS ha fallado, por lo que se ha cerrado la conexión (sólo se utiliza en QSslSocket)
QAbstractSocket::UnfinishedSocketOperationError11Usado sólo por QAbstractSocketEngine, La última operación intentada no ha terminado aún (aún en progreso en segundo plano).
QAbstractSocket::ProxyConnectionRefusedError14No se pudo contactar con el servidor proxy porque se denegó la conexión a ese servidor
QAbstractSocket::ProxyConnectionClosedError15La conexión con el servidor proxy se cerró inesperadamente (antes de que se estableciera la conexión con el peer final)
QAbstractSocket::ProxyConnectionTimeoutError16La conexión con el servidor proxy expiró o el servidor proxy dejó de responder en la fase de autenticación.
QAbstractSocket::ProxyNotFoundError17No se ha encontrado la dirección proxy establecida con setProxy() (o el proxy de la aplicación).
QAbstractSocket::ProxyProtocolError18La negociación de la conexión con el servidor proxy ha fallado porque no se ha podido comprender la respuesta del servidor proxy.
QAbstractSocket::OperationError19Se intentó una operación mientras el socket estaba en un estado que no lo permitía.
QAbstractSocket::SslInternalError20La 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::SslInvalidUserDataError21Se proporcionaron datos no válidos (certificado, clave, cifrado, etc.) y su uso provocó un error en la biblioteca SSL.
QAbstractSocket::TemporaryError22Se ha producido un error temporal (por ejemplo, la operación se bloquearía y el socket no es bloqueante).
QAbstractSocket::UnknownSocketError-1Se 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.

ConstanteValorDescripción
QAbstractSocket::LowDelayOption0Intenta 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::KeepAliveOption1Establézcalo a 1 para activar la opción de socket SO_KEEPALIVE.
QAbstractSocket::MulticastTtlOption2Póngalo a un valor entero para activar la opción de socket IP_MULTICAST_TTL (TTL para datagramas multicast).
QAbstractSocket::MulticastLoopbackOption3Establézcalo a 1 para activar la opción de socket IP_MULTICAST_LOOP (multicast loopback).
QAbstractSocket::TypeOfServiceOption4Esta 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::SendBufferSizeSocketOption5Establece 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::ReceiveBufferSizeSocketOption6Establece 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::PathMtuSocketOption7Recupera 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::KeepAliveIdleOption8El 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::KeepAliveIntervalOption9El 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::KeepAliveCountOption10El 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:

ValorDescripción
224Control de red
192Control de red
160CRITIC/ECP
128Anulación de flash
96Flash
64Inmediato
32Prioridad
0Rutina

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.

ConstanteValorDescripción
QAbstractSocket::UnconnectedState0El socket no está conectado.
QAbstractSocket::HostLookupState1El socket está realizando una búsqueda de nombre de host.
QAbstractSocket::ConnectingState2El socket ha comenzado a establecer una conexión.
QAbstractSocket::ConnectedState3Se ha establecido una conexión.
QAbstractSocket::BoundState4El socket está vinculado a una dirección y un puerto.
QAbstractSocket::ClosingState6El socket está a punto de cerrarse (los datos pueden estar aún esperando a ser escritos).
QAbstractSocket::ListeningState5Sólo para uso interno.

Véase también QAbstractSocket::state().

enum QAbstractSocket::SocketType

Este enum describe el protocolo de la capa de transporte.

ConstanteValorDescripción
QAbstractSocket::TcpSocket0TCP
QAbstractSocket::UdpSocket1UDP
QAbstractSocket::SctpSocket2SCTP
QAbstractSocket::UnknownSocketType-1Distintos 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.