5
是否有可能創建一個新的QSslSocket併爲它獲取對現有TCP連接的所有權,並丟棄舊的QTcpSocket而不中斷或關閉TCP連接?Morph現有的QTcpSocket到QSslSocket
我想這能實現我的FTP服務器,即要求最初的連接是加密的,並且僅在FTP客戶端的請求(命令AUTH SSL
或AUTH TLS
),如果它在所有的,一個SSL/TLS明確FTPS握手開始。
是否有可能創建一個新的QSslSocket併爲它獲取對現有TCP連接的所有權,並丟棄舊的QTcpSocket而不中斷或關閉TCP連接?Morph現有的QTcpSocket到QSslSocket
我想這能實現我的FTP服務器,即要求最初的連接是加密的,並且僅在FTP客戶端的請求(命令AUTH SSL
或AUTH TLS
),如果它在所有的,一個SSL/TLS明確FTPS握手開始。
是的,這是可能的。最簡單的方法是將QTcpSocket
替換爲QSslSocket
。在撥打startClientEncryption
之前,QSslSocket
的行爲與正常的QTcpSocket
(無加密)完全相同。之後,QSslSocket
將像正常QTcpSocket
那樣工作,但所有通信都在後臺進行加密。
使用此功能,我實際上可以在不到一個小時的時間內移植一個100k +項目以使用SSL。
沒有(真正的)開銷使用QSslSocket
在未加密的模式,因爲它只是調用相應的QTcpSocket
方法。例如讀取方法(qsslsocket.cpp
Qt 4.8.3):
if (d->mode == UnencryptedMode && !d->autoStartHandshake) {
readBytes = d->plainSocket->read(data, maxlen);
} else {
//encryption stuff