sas*_*alm 6 c++ qt qtcpsocket qsslsocket
是否可以创建一个新的QSslSocket并使其获得现有TCP连接的所有权,并且旧的QTcpSocket将被丢弃,而不会中断或关闭TCP连接?
我需要这个在我的FTP服务器中实现显式FTPS,这要求最初连接是未加密的,并且只有在FTP客户端的请求(命令AUTH SSL或AUTH TLS)时,如果它发生,则启动SSL/TLS握手.
是的,这是可能的.最简单的方法是QTcpSocket用a 替换QSslSocket.在你打电话之前,它的QSslSocket行为与正常QTcpSocket(无加密)完全相同startClientEncryption.之后,QSslSocket意志就像正常一样,QTcpSocket但所有通信都在后台加密.
使用这个我实际上能够在不到一个小时的时间内移植100k + line项目以使用SSL.
QSslSocket在未加密模式下没有(实际)开销,因为它只会调用相应的QTcpSocket方法.例如,读取方法(qsslsocket.cppQt 4.8.3):
if (d->mode == UnencryptedMode && !d->autoStartHandshake) {
readBytes = d->plainSocket->read(data, maxlen);
} else {
//encryption stuff
Run Code Online (Sandbox Code Playgroud)