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은 네트워크 프로그래밍 API의 일부입니다.
공용 함수
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(스트림 제어 전송 프로토콜)는 널리 사용되는 프로토콜인 TCP 및 UDP와 유사한 역할을 하는 전송 계층 프로토콜입니다. UDP와 마찬가지로 SCTP는 메시지 지향적이지만 TCP와 같은 혼잡 제어 기능을 통해 안정적인 메시지 전송을 보장합니다.
SCTP는 연결 지향 프로토콜로, 엔드포인트 간에 여러 데이터 스트림을 동시에 완벽하게 전송할 수 있습니다. 이러한 멀티 스트리밍을 통해 데이터를 독립적인 채널로 전송할 수 있으므로 한 스트림에서 데이터 손실이 발생하더라도 다른 스트림의 전송에는 영향을 미치지 않습니다.
메시지 지향적이기 때문에 SCTP는 TCP처럼 끊어지지 않는 바이트 스트림을 전송하는 대신 메시지 시퀀스를 전송합니다. UDP와 마찬가지로 SCTP에서는 발신자가 한 번의 작업으로 메시지를 전송하고, 그 정확한 메시지가 한 번의 작업으로 수신 애플리케이션 프로세스에 전달됩니다. 하지만 UDP와 달리 전송이 보장됩니다.
또한 멀티 호밍을 지원하므로 연결된 엔드포인트에 네트워크 장애 또는 변화하는 조건을 우회하기 위해 대체 IP 주소를 연결할 수 있습니다.
QSctpSocket은 QTcpSocket 의 편리한 서브클래스로, 안정적인 데이터그램 서비스를 위해 SCTP를 통해 TCP 데이터 스트림을 에뮬레이션하거나 SCTP 연결을 설정할 수 있습니다.
QSctpSocket은 두 가지 모드 중 하나로 작동할 수 있습니다:
- 연속 바이트 스트림(TCP 에뮬레이션).
- 멀티스트림 데이터그램 모드.
연속 바이트 스트림 모드를 설정하려면 QSctpSocket을 인스턴스화하고 음수 값으로 setMaximumChannelCount()를 호출합니다. 이렇게 하면 일반 버퍼링된 QTcpSocket 으로 QSctpSocket을 사용할 수 있습니다. connectToHost ()를 호출하여 엔드포인트와의 연결을 시작하고 write()를 호출하여 전송하고 read()를 호출하여 피어로부터 데이터를 수신할 수 있지만 메시지 경계를 구분할 수는 없습니다.
기본적으로 QSctpSocket은 데이터그램 모드로 작동합니다. 연결하기 전에 setMaximumChannelCount()를 호출하여 애플리케이션이 지원할 준비가 된 최대 채널 수를 설정하세요. 이 숫자는 원격 엔드포인트와 협상되는 매개변수이며 운영 체제에 따라 그 값이 제한될 수 있습니다. 기본값인 0은 피어의 값을 사용하도록 지정합니다. 두 엔드포인트 모두 기본값이 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(문자 *데이터, qint64 maxSize).
QNetworkDatagram QSctpSocket::readDatagram()
현재 읽기 채널의 버퍼에서 데이터그램을 읽고 발신자의 호스트 주소 및 포트와 함께 QNetworkDatagram 객체로 반환합니다. 가능한 경우 이 함수는 수신 시 데이터그램의 대상 주소, 포트, 홉 카운트 수도 확인하려고 시도합니다.
실패하면 not valid 을 보고하는 QNetworkDatagram 을 반환합니다.
writeDatagram(), isInDatagramMode() 및 currentReadChannel()도 참조하세요 .
[override virtual protected]
qint64 QSctpSocket::readLineData(char *data, qint64 maxlen)
다시 구현합니다: QAbstractSocket::readLineData(문자 *데이터, qint64 maxlen).
void QSctpSocket::setMaximumChannelCount(int count)
애플리케이션이 데이터그램 모드에서 지원할 준비가 된 최대 채널 수를 count 으로 설정합니다. count 이 0이면 엔드포인트의 최대 채널 수 값이 사용됩니다. 음수 count 는 연속 바이트 스트림 모드를 설정합니다.
QSctpSocket 가 연결되지 않은 상태일 때만 이 메서드를 호출하세요.
maximumChannelCount(), readChannelCount(), writeChannelCount()도 참조하세요 .
bool QSctpSocket::writeDatagram(const QNetworkDatagram &datagram)
현재 쓰기 채널의 버퍼에 datagram 를 씁니다. 성공하면 참을 반환하고, 그렇지 않으면 거짓을 반환합니다.
readDatagram(), isInDatagramMode() 및 currentWriteChannel()도 참조하세요 .
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.