QSctpSocket Class

QSctpSocket クラスは SCTP ソケットを提供します。詳細...

Header: #include <QSctpSocket>
CMake: find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake: QT += network
Inherits: 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はコネクション指向のプロトコルであり、エンドポイント間で複数の データストリームを完全に同時に伝送することができる。このマルチストリームにより、データを独立したチャネルで配信すること ができるため、1つのストリームでデータ損失が発生しても、他のストリー ムの配信には影響がない。

メッセージ指向であるため、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プラットフォームではサポートされていません。

QSctpServerQTcpSocketQAbstractSocketも参照のこと

メンバ関数ドキュメント

[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 オブジェクトとして返す。可能であれば、この関数は受信時にデータグラムの宛先アドレス、ポート、ホップ数を決定することも試みる。

QNetworkDatagram 失敗した場合、not valid を返す。

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()も参照してください

©2024 The Qt Company Ltd. 本文書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。