我正在开发一个使用SSL套接字进行通信的应用程序。当一个不受信任的客户端连接到服务器时,它会发出sslError。现在我需要向用户询问决定,使用QDialog::exec(我不能使用异步操作,因为我需要在sslError中处理错误,要么忽略sslError,要么中止连接,这取决于用户的决定)。此外,当我打开另一个窗口时,客户端断开连接(客户端套接字似乎被删除),然后当我访问套接字时,QDialog exec返回时会抛出内存访问冲突的错误。
Qt文档中对QDialog::exec的说明如下:
Qt文档中对QDialog::exec的说明如下:
注意:避免使用此函数;而是使用open()。与exec()不同,open()是异步的,并且不会启动额外的事件循环。这可以防止发生一系列危险的错误(例如,在通过exec()打开对话框时删除对话框的父对象)。当使用open()时,您可以连接到QDialog的finished()信号,以便在对话框关闭时得到通知。
在这种情况下我应该怎么办?
我有一个备选的身份验证流程,它从连接开始,如果有任何sslHandshakeErrors,允许连接继续,然后稍后我会异步显示对话框,如果用户按下确定,我发送一个名为authOk的数据包并继续读取,否则我发送一个名为authFailed的数据包并断开客户端连接。但在这个过程中,似乎没有使用标准的SSL连接握手。
是否有更好的解决方案,谢谢:)