En esta página

QSctpSocket Class

La clase QSctpSocket proporciona un socket SCTP. Más...

Cabecera: #include <QSctpSocket>
CMake: find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake: QT += network
Hereda: QTcpSocket

Funciones Públicas

QSctpSocket(QObject *parent = nullptr)
virtual ~QSctpSocket()
bool isInDatagramMode() const
int maximumChannelCount() const
QNetworkDatagram readDatagram()
void setMaximumChannelCount(int count)
bool writeDatagram(const QNetworkDatagram &datagram)

Funciones Públicas Reimplementadas

virtual void close() override
virtual void disconnectFromHost() override

Funciones Protegidas Reimplementadas

virtual qint64 readData(char *data, qint64 maxSize) override
virtual qint64 readLineData(char *data, qint64 maxlen) override

Descripción Detallada

SCTP (Stream Control Transmission Protocol) es un protocolo de capa de transporte que desempeña un papel similar al de los populares protocolos TCP y UDP. Al igual que UDP, SCTP está orientado a mensajes, pero garantiza un transporte de mensajes fiable y en secuencia con control de congestión como TCP.

SCTP es un protocolo orientado a la conexión, que proporciona la transmisión simultánea completa de múltiples flujos de datos entre puntos finales. Este multi-streaming permite que los datos se entreguen por canales independientes, de modo que si hay pérdida de datos en un stream, la entrega no se verá afectada para los otros streams.

Al estar orientado a mensajes, SCTP transporta una secuencia de mensajes, en lugar de transportar un flujo ininterrumpido de bytes como hace TCP. Como en UDP, en SCTP un remitente envía un mensaje en una operación, y ese mensaje exacto se pasa al proceso de aplicación receptor en una operación. Pero a diferencia de UDP, la entrega está garantizada.

También soporta multi-homing, lo que significa que un punto final conectado puede tener direcciones IP alternativas asociadas a él con el fin de enrutar alrededor de un fallo de red o condiciones cambiantes.

QSctpSocket es una subclase de QTcpSocket que permite emular el flujo de datos TCP sobre SCTP o establecer una conexión SCTP para un servicio de datagramas fiable.

QSctpSocket puede funcionar en uno de los dos modos posibles:

  • Flujo continuo de bytes (emulación TCP).
  • Modo de flujo múltiple de datagramas.

Para establecer un modo de flujo continuo de bytes, instancie QSctpSocket y llame a setMaximumChannelCount() con un valor negativo. Esto permite utilizar QSctpSocket como un buffer normal QTcpSocket. Puedes llamar a connectToHost() para iniciar la conexión con el punto final, write() para transmitir y read() para recibir datos del peer, pero no puedes distinguir los límites de los mensajes.

Por defecto, QSctpSocket funciona en modo datagrama. Antes de conectarse, llame a setMaximumChannelCount() para establecer el número máximo de canales que la aplicación está preparada para soportar. Este número es un parámetro negociado con el endpoint remoto y su valor puede ser acotado por el sistema operativo. El valor por defecto de 0 indica utilizar el valor del peer. Si ambos endpoints tienen valores por defecto, entonces el número de canales de conexión depende del sistema. Después de establecer una conexión, puedes obtener el número real de canales llamando a readChannelCount() y writeChannelCount().

QSctpSocket *socket = new QSctpSocket(this);

socket->setMaxChannelCount(16);
socket->connectToHost(QHostAddress::LocalHost, 1973);

if (socket->waitForConnected(1000)) {
    int inputChannels = socket->readChannelCount();
    int outputChannels = socket->writeChannelCount();

    ....
}

En modo datagrama, QSctpSocket realiza el buffering de datagramas independientemente para cada canal. Puedes poner en cola un datagrama en el buffer del canal actual llamando a writeDatagram() y leer un datagrama pendiente llamando a readDatagram() respectivamente.

El uso de las funciones estándar QIODevice read (), readLine(), write(), etc. está permitido en modo datagrama con las mismas limitaciones que en modo flujo continuo de bytes.

Nota: Esta clase no está soportada en la plataforma Windows.

Véase también QSctpServer, QTcpSocket, y QAbstractSocket.

Documentación de las funciones miembro

[explicit] QSctpSocket::QSctpSocket(QObject *parent = nullptr)

Crea un objeto QSctpSocket en el estado UnconnectedState.

Establece el modo de operación de datagramas. El argumento parent se pasa al constructor de QObject.

Véase también socketType() y setMaximumChannelCount().

[virtual noexcept] QSctpSocket::~QSctpSocket()

Destruye el socket, cerrando la conexión si es necesario.

Véase también close().

[override virtual] void QSctpSocket::close()

Reimplementa: QAbstractSocket::close().

[override virtual] void QSctpSocket::disconnectFromHost()

Reimplementa: QAbstractSocket::disconnectFromHost().

bool QSctpSocket::isInDatagramMode() const

Devuelve true si el socket está funcionando en modo datagrama.

Véase también setMaximumChannelCount().

int QSctpSocket::maximumChannelCount() const

Devuelve el número máximo de canales que admite QSctpSocket.

Un valor de 0 (por defecto) significa que el número de canales de conexión será establecido por el extremo remoto.

Devuelve -1 si QSctpSocket se está ejecutando en modo de flujo continuo de bytes.

Véase también setMaximumChannelCount(), readChannelCount() y writeChannelCount().

[override virtual protected] qint64 QSctpSocket::readData(char *data, qint64 maxSize)

Reimplementa: QAbstractSocket::readData(char *data, qint64 maxSize).

QNetworkDatagram QSctpSocket::readDatagram()

Lee un datagrama del búfer del canal de lectura actual y lo devuelve como un objeto QNetworkDatagram, junto con la dirección del host y el puerto del remitente. Si es posible, esta función también intentará determinar la dirección de destino del datagrama, el puerto y el número de saltos en el momento de la recepción.

En caso de fallo, devuelve un QNetworkDatagram que informa de not valid.

Véase también writeDatagram(), isInDatagramMode() y currentReadChannel().

[override virtual protected] qint64 QSctpSocket::readLineData(char *data, qint64 maxlen)

Reimplementa: QAbstractSocket::readLineData(char *data, qint64 maxlen).

void QSctpSocket::setMaximumChannelCount(int count)

Establece el número máximo de canales que la aplicación está preparada para soportar en modo datagrama, en count. Si count es 0, se utiliza el valor del extremo para el número máximo de canales. Negativo count establece un modo de flujo continuo de bytes.

Llame a este método sólo cuando QSctpSocket esté en UnconnectedState.

Véase también maximumChannelCount(), readChannelCount(), y writeChannelCount().

bool QSctpSocket::writeDatagram(const QNetworkDatagram &datagram)

Escribe un datagram en el búfer del canal de escritura actual. Devuelve true en caso de éxito; en caso contrario devuelve false.

Véase también readDatagram(), isInDatagramMode() y currentWriteChannel().

© 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.