このページでは

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では送信者が1回の操作でメッセージを送信し、その正確なメッセージが1回の操作で受信側のアプリケーションプロセスに渡されます。しかし、UDPとは異なり、配信は保証されています。

また、マルチホーミングもサポートしており、接続されたエンドポイントには、ネットワーク障害や状況の変化を回避するために、複数のIPアドレスを関連付けることができます。

QSctpSocketは、QTcpSocket の利便性を高めるサブクラスであり、SCTP上でTCPデータストリームをエミュレートしたり、信頼性の高いデータグラムサービスのためのSCTP接続を確立したりすることができます。

QSctpSocket は、以下の 2 つのモードのいずれかで動作します。

  • 連続バイトストリーム(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.