Qt ネットワーク プログラミング (TCP&UDP)から、QTcpSocket には独自の内部読み取りおよび書き込みバッファーがあることがわかっています. 以下では、これら 2 つのバッファーが Windows でどのように実装されているかを具体的に分析します.
1.QTcpソケット
分析の前に、デバイスの 2 つのアクセス方法、連続アクセスとランダム アクセスを紹介します。連続アクセス デバイスには、開始、終了、サイズ、および現在位置の概念がなく、シークをサポートしていません。読み取るデータがあることをデバイスが通知した場合にのみ読み取ることができます。最も一般的なシリアル アクセス デバイスはソケットです. Unix では、/dev/zero や fifo パイプなどの一部の特殊ファイルがシリアル アクセス デバイスです。
これに対応して、通常のファイルはランダム アクセスをサポートし、すべてサイズと現在位置の概念を持ち、データ フローの前方または後方シークをサポートします。
したがって、QTcpSocket の場合、isSequential() は true を返します。
1. データを書き込む
最初にデータの書き込みを見てみましょう. データを書き込むための典型的なコードは次のとおりです:
QString data = "CSDN: CaoShangPa";
QByteArray buffer = data.toUtf8();
tcpSocket.write(buffer);
write は、QTcpSocket の基本クラス QIODevice から取得されます
qint64 QIODevice::write(const char *data)
{
return write(data, qstrlen(data));
}
qint64 QIODevice::write(const char *data, qint64 maxSize)