将现有的QTcpSocket修改为QSslSocket



是否有可能创建一个新的QSslSocket,并为它采取所有权在现有的TCP连接,和旧的QTcpSocket被丢弃,而不中断或关闭TCP连接?

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

这是可能的。最简单的方法是用QSslSocket代替QTcpSocket。在调用startClientEncryption之前,QSslSocket的行为与正常的QTcpSocket完全相同(没有加密)。之后,QSslSocket将像正常的QTcpSocket一样工作,但所有通信都在后台加密。

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

<标题>编辑

在未加密模式下使用QSslSocket没有(实际)开销,因为它只会调用相应的QTcpSocket方法。例如read方法(qsslsocket.cpp Qt 4.8.3):

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

相关内容

  • 没有找到相关文章

最新更新