6

是否可以创建一个新的 QSslSocket 并让它接管现有的 TCP 连接,并丢弃旧的 QTcpSocket,而不中断或关闭 TCP 连接?

我需要它来在我的 FTP 服务器中实现显式 FTPS,这要求最初连接是未加密的,并且只有在 FTP 客户端的请求(命令AUTH SSLAUTH TLS)时,如果它出现,就会启动 SSL/TLS 握手。

4

1 回答 1

7

是的,这是可能的。最简单的方法是将 替换QTcpSocketQSslSocket. 在您QSslSocket调用. 之后,它将像正常一样运行,但所有通信都在后台加密。QTcpSocketstartClientEncryptionQSslSocketQTcpSocket

使用它,我实际上能够在不到一小时的时间内移植一个超过 100k 行的项目以使用 SSL。

编辑

在未加密模式下使用没有(真正的)开销,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 回答