是否可以创建一个新的 QSslSocket 并让它获得现有 TCP 连接的所有权,并丢弃旧的 QTcpSocket,而不中断或关闭 TCP 连接?
我需要它在我的 FTP 服务器中实现显式 FTPS,这要求最初连接是未加密的,并且仅在 FTP 客户端请求时(命令 AUTH SSL
或 AUTH TLS
),如果出现,则启动 SSL/TLS 握手。
最佳答案
是的,这是可能的。最简单的方法是用 QSslSocket
替换 QTcpSocket
。在您调用 startClientEncryption
之前,QSslSocket
的行为与普通的 QTcpSocket
完全一样(无加密)。之后 QSslSocket
将像普通的 QTcpSocket
一样工作,但所有通信都在后台加密。
使用它,我实际上能够在不到一小时内移植一个 10 万多行的项目以使用 SSL。
编辑
在未加密模式下使用QSslSocket
没有(真正的)开销,因为它只会调用相应的QTcpSocket
方法。例如读取方法(qsslsocket.cpp
Qt 4.8.3):
if (d->mode == UnencryptedMode && !d->autoStartHandshake) {
readBytes = d->plainSocket->read(data, maxlen);
} else {
//encryption stuff
关于c++ - 将现有的 QTcpSocket 变形为 QSslSocket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14258022/