2013-01-10 12 views
5

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

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

答えて

6

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

これを使って、実際には1時間以内にSSLを使用するように100k + linesプロジェクトを移植することができました。

編集

それだけで対応するQTcpSocketメソッドを呼び出しますので、暗号化されていないモードでQSslSocketを使用するには、no(本当の)オーバーヘッドはありません。例えば、読み取り方法(qsslsocket.cpp Qt 4.8.3):

if (d->mode == UnencryptedMode && !d->autoStartHandshake) { 
    readBytes = d->plainSocket->read(data, maxlen); 
} else { 
//encryption stuff