Qt / OSX WebSocket打开握手超时

时间:2017-12-08 16:59:09

标签: c++ macos qt google-chrome websocket

我刚刚在Qt中开发了一个使用WebSocket服务器(QWebSocketServer)的应用程序。我在Linux下做了这个,一切都很好,但是当我在Mac OS上运行代码时,我无法从Chrome上的网页连接到服务器。

连接花了很长时间,几分钟后我从Chrome获得了WebSocket opening handshake timed out

最后我回到了基础并尝试了Qt的例子:

http://doc.qt.io/qt-5/qtwebsockets-sslechoserver-example.html

完全一样。

编辑:

删除SSL并使用非安全的websockets后,即使在同一端口上也能正常工作。

Mac上的Chrome可以访问远程(非Mac)计算机上的安全Qt WebSocket服务器,但远程计算机上的Chrome在连接到Mac(安全)时会超时 - 所以它似乎有问题Qt QWebSocketServer示例。它在Linux和Windows上都能正常工作。

正在建立连接(因为如果应用程序未运行或已关闭,Web浏览器会立即失败),但无论出于何种原因它都没有完成。

知道这可能是什么,或者我如何试图追踪它?

谢谢!

2 个答案:

答案 0 :(得分:1)

qt文档(http://doc.qt.io/qt-5/qsslsocket.html)说: 注意:macOS上的安全传输SSL后端可能会通过导入本地证书和密钥来更新默认的钥匙串(默认可能是您的登录钥匙串)。当您的应用程序使用这些私钥时,这也可能导致系统对话框显示并征求许可。如果不希望出现这种情况,请将QT_SSL_USE_TEMPORARY_KEYCHAIN环境变量设置为非零值;否则,请执行以下操作。这将提示QSslSocket使用其自己的临时钥匙串。

答案 1 :(得分:0)

这里的问题似乎与MacOS的权限系统有一些互动。

第一次运行应用程序并连接时,应用程序将弹出一个窗口,询问访问钥匙串的权限(我猜安装证书)。

如果你在那时关闭对话框,它就不会再回来了,似乎没有基于QtWebSocketServer的程序从那时开始运行,直到你重新启动!