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は、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 を現在の書き込みチャネルのバッファに書き込みます。成功すると 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.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。