我刚刚在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浏览器会立即失败),但无论出于何种原因它都没有完成。
知道这可能是什么,或者我如何试图追踪它?
谢谢!
答案 0 :(得分:1)
qt文档(http://doc.qt.io/qt-5/qsslsocket.html)说: 注意:macOS上的安全传输SSL后端可能会通过导入本地证书和密钥来更新默认的钥匙串(默认可能是您的登录钥匙串)。当您的应用程序使用这些私钥时,这也可能导致系统对话框显示并征求许可。如果不希望出现这种情况,请将QT_SSL_USE_TEMPORARY_KEYCHAIN环境变量设置为非零值;否则,请执行以下操作。这将提示QSslSocket使用其自己的临时钥匙串。
答案 1 :(得分:0)
这里的问题似乎与MacOS的权限系统有一些互动。
第一次运行应用程序并连接时,应用程序将弹出一个窗口,询问访问钥匙串的权限(我猜安装证书)。
如果你在那时关闭对话框,它就不会再回来了,似乎没有基于QtWebSocketServer的程序从那时开始运行,直到你重新启动!