이 페이지에서

QSctpSocket Class

QSctpSocket 클래스는 SCTP 소켓을 제공합니다. 더 보기...

헤더: #include <QSctpSocket>
CMake: find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake: QT += network
상속: QTcpSocket

공개 함수

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

재구현된 공용 함수

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

재구현된 보호된 함수

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

상세 설명

SCTP(Stream Control Transmission Protocol)는 널리 사용되는 TCP 및 UDP 프로토콜과 유사한 역할을 수행하는 전송 계층 프로토콜입니다. UDP와 마찬가지로 SCTP는 메시지 지향적이지만, TCP와 같은 혼잡 제어 기능을 통해 메시지의 안정적이고 순서대로 전송을 보장합니다.

SCTP는 연결 지향 프로토콜로, 종단점 간에 여러 데이터 스트림을 완전히 동시에 전송할 수 있게 해줍니다. 이러한 다중 스트리밍을 통해 데이터는 독립적인 채널을 통해 전달되므로, 한 스트림에서 데이터 손실이 발생하더라도 다른 스트림의 전달에는 영향을 미치지 않습니다.

메시지 지향적인 SCTP는 TCP가 하는 것처럼 끊김 없는 바이트 스트림을 전송하는 대신, 일련의 메시지를 순차적으로 전송합니다. UDP와 마찬가지로 SCTP에서도 발신자는 한 번의 작업으로 메시지를 전송하며, 그 정확한 메시지가 한 번의 작업으로 수신 애플리케이션 프로세스에 전달됩니다. 하지만 UDP와 달리 전송이 보장됩니다.

또한 멀티호밍을 지원하므로, 연결된 엔드포인트에는 네트워크 장애나 변화하는 상황을 우회하기 위해 대체 IP 주소가 할당될 수 있습니다.

`QSctpSocket`는 ` QTcpSocket `의 편의 서브클래스로, SCTP를 통해 TCP 데이터 스트림을 에뮬레이션하거나, 신뢰성 있는 데이터그램 서비스를 위해 SCTP 연결을 설정할 수 있게 해줍니다.

QSctpSocket은 다음 두 가지 모드 중 하나로 작동할 수 있습니다.

  • 연속 바이트 스트림(TCP 에뮬레이션).
  • 다중 스트림 데이터그램 모드.

연속 바이트 스트림 모드를 설정하려면 QSctpSocket을 인스턴스화하고 음수 값을 사용하여 ` setMaximumChannelCount()`를 호출하십시오. 이렇게 하면 QSctpSocket을 일반 버퍼링된 QTcpSocket 로 사용할 수 있습니다. connectToHost()를 호출하여 엔드포인트와의 연결을 시작하고, write()를 호출하여 데이터를 전송하며, read()를 호출하여 피어로부터 데이터를 수신할 수 있지만, 메시지 경계를 구분할 수는 없습니다.

기본적으로 QSctpSocket은 데이터그램 모드로 작동합니다. 연결하기 전에 setMaximumChannelCount()를 호출하여 애플리케이션이 지원할 수 있는 최대 채널 수를 설정해야 합니다. 이 수는 원격 엔드포인트와 협상되는 매개변수이며, 그 값은 운영 체제에 의해 제한될 수 있습니다. 기본값인 0은 피어의 값을 사용함을 나타냅니다. 양쪽 엔드포인트 모두 기본값을 가진 경우, 연결 채널 수는 시스템에 따라 달라집니다. 연결이 설정된 후에는 readChannelCount() 및 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();

    ....
}

데이터그램 모드에서 QSctpSocket은 각 채널별로 데이터그램 버퍼링을 독립적으로 수행합니다. writeDatagram()을 호출하여 데이터그램을 현재 채널의 버퍼에 큐에 넣을 수 있으며, readDatagram()을 호출하여 대기 중인 데이터그램을 읽을 수 있습니다.

데이터그램 모드에서는 연속 바이트 스트림 모드와 동일한 제한 사항 하에 표준 QIODevice 함수인 read(), readLine(), write() 등을 사용할 수 있습니다.

참고: 이 클래스는 Windows 플랫폼에서 지원되지 않습니다.

QSctpServer, QTcpSocket 및 QAbstractSocket도 참조하십시오 .

멤버 함수 설명서

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

UnconnectedState 상태의 QSctpSocket 객체를 생성합니다.

데이터그램 작동 모드를 설정합니다. ` parent ` 인수는 ` QObject`의 생성자에 전달됩니다.

socketType() 및 setMaximumChannelCount()도 참조하십시오 .

[virtual noexcept] QSctpSocket::~QSctpSocket()

소켓을 삭제하고, 필요한 경우 연결을 종료합니다.

close()도 참조하십시오 .

[override virtual] void QSctpSocket::close()

QAbstractSocket::close()을 재구현합니다.

[override virtual] void QSctpSocket::disconnectFromHost()

QAbstractSocket::disconnectFromHost()을 재구현합니다.

bool QSctpSocket::isInDatagramMode() const

소켓이 데이터그램 모드로 실행 중일 경우 true 를 반환합니다.

setMaximumChannelCount()도 참조하십시오 .

int QSctpSocket::maximumChannelCount() const

QSctpSocket 가 지원할 수 있는 최대 채널 수를 반환합니다.

값이 0(기본값)인 경우, 연결 채널 수는 원격 엔드포인트에 의해 설정됩니다.

QSctpSocket 가 연속 바이트 스트림 모드로 실행 중인 경우 -1을 반환합니다.

setMaximumChannelCount(), readChannelCount(), writeChannelCount()도 참조하십시오 .

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

QAbstractSocket::readData(char *data, qint64 maxSize)를 재구현합니다.

QNetworkDatagram QSctpSocket::readDatagram()

현재 읽기 채널의 버퍼에서 데이터그램을 읽어와, 발신자의 호스트 주소 및 포트와 함께 ` QNetworkDatagram ` 객체로 반환합니다. 가능한 경우, 이 함수는 수신 시점의 데이터그램 목적지 주소, 포트 및 홉 수를 파악하려고 시도합니다.

실패 시, ` not valid`를 보고하는 ` QNetworkDatagram ` 객체를 반환합니다.

writeDatagram(), isInDatagramMode(), currentReadChannel()도 참조하십시오 .

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

QAbstractSocket::readLineData(char *data, qint64 maxlen)을 재구현합니다.

void QSctpSocket::setMaximumChannelCount(int count)

데이터그램 모드에서 애플리케이션이 지원할 수 있는 최대 채널 수를 ` count`으로 설정합니다. ` count `이 0인 경우, 엔드포인트의 최대 채널 수 값이 사용됩니다. 음수 값의 ` count `을 지정하면 연속 바이트 스트림 모드가 설정됩니다.

이 메서드는 QSctpSocket 가 UnconnectedState 상태일 때만 호출해야 합니다.

maximumChannelCount(), readChannelCount() 및 writeChannelCount()도 참조하십시오 .

bool QSctpSocket::writeDatagram(const QNetworkDatagram &datagram)

현재 쓰기 채널의 버퍼에 ` datagram `를 기록합니다. 성공하면 `true`를 반환하고, 그렇지 않으면 `false`를 반환합니다.

readDatagram(), isInDatagramMode(), 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.