【问题标题】:Can QSslSocket be used immediately after startServerEncryption()?可以在 startServerEncryption() 之后立即使用 QSslSocket 吗?
【发布时间】:2013-02-16 21:09:48
【问题描述】:

调用QSslSocket::startServerEncryption()后,是否可以直接将socket当作普通QTcpSocket使用,读写数据,还是需要先调用waitForStartEncrypted()才能使用?

socket->startServerEncryption();
socket->waitForEncrypted(); // <==== Is this line necessary?
socket->write(data);
QByteArray response = socket->read();

【问题讨论】:

    标签: c++ qt qsslsocket


    【解决方案1】:

    您可以立即开始使用它。数据将被缓冲并稍后发送。请注意,您还不能从中读取任何数据,因为没有任何数据到达。在进入事件循环之前,不会发生实际的连接和握手。

    【讨论】:

    • 好的,但是当我不调用 waitForEncrypted() 进行数据连接时,我的 FTP 服务器会阻塞。当我在startServerEncryption() 之后立即调用它时,它确实可以正常工作。但根据文档,正如我所读到的,waitForEncrypted() 不应该是必需的!
    • 您必须确保重新进入主事件循环,否则您的数据将无法传输。
    • 什么时候,在socket-&gt;startServerEncryption() 和任何数据读取或写入之间?而socket-&gt;waitForEncrypted() 并没有真正重新进入事件循环,它只是阻塞,对吧?但它仍然使代码正常工作。
    • socket->waitForEncrypted() 创建一个嵌套的事件循环 - 从调用者的角度来看,它似乎是阻塞的,但实际上并没有。
    • 我尝试在socket-&gt;startServerEncryption() 之后使用socket-&gt;waitForEncrypted(0),但没有帮助,因此仅短暂进入事件循环是不够的。
    猜你喜欢
    • 2012-12-20
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    相关资源
    最近更新 更多