6

TCP接続を中断または閉じることなく、新しいQSslSocketを作成して、既存のTCP接続の所有権を取得し、古いQTcpSocketを破棄することは可能ですか?

FTPサーバーに明示的なFTPSを実装するためにこれが必要です。これには、最初に接続が暗号化されていないことが必要であり、FTPクライアントの要求(コマンドAUTH SSLまたはAUTH TLS)があった場合にのみ、SSL/TLSハンドシェイクが開始されます。

4

1 に答える 1

7

はい、これは可能です。これを行う最も簡単な方法は、をに置き換えることQTcpSocketですQSslSocketQSslSocketを呼び出すまで、は通常のQTcpSocket(暗号化なし)のように動作しますstartClientEncryption。その後、はQSslSocket通常のように動作しますQTcpSocketが、すべての通信はバックグラウンドで暗号化されます。

これを使用して、私は実際に1時間以内にSSLを使用するために100k以上の回線プロジェクトを移植することができました。

編集

対応するメソッドQSslSocketを呼び出すだけなので、暗号化されていないモードで使用する(実際の)オーバーヘッドはありません。QTcpSocketたとえば、読み取りメソッド(qsslsocket.cppQt 4.8.3):

if (d->mode == UnencryptedMode && !d->autoStartHandshake) {
    readBytes = d->plainSocket->read(data, maxlen);
} else {
//encryption stuff
于 2013-01-10T13:31:57.267 に答える