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は、Network Programming 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 (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プラットフォームではサポートされていません。
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 オブジェクトとして、送信者のホストアドレスとポートとともに返す。可能であれば、この関数はデータグラムの宛先アドレス、ポート、および受信時のホップ数を決定することも試みる。
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 を書き込む。成功すれば真を返し、そうでなければ偽を返す。
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.