Qt QSSlSocket - SEGFAULT on 'connectToHostEncrypted();'
Qt QSSlSocket - SEGFAULT on 'connectToHostEncrypted();'
我正在尝试通过SSL连接到Twitch聊天服务器,我基本上从QT中的安全SSL连接示例中复制并粘贴了一些代码。当我能connectToHostEncrypted
的时候,一切都崩溃了。任何帮助都非常感谢
相对代码:
void MainWindow::secureConnect()
{
if (!socket) {
socket = new QSslSocket(this);
connect(socket, SIGNAL(stateChanged(QAbstractSocket::SocketState)),
this, SLOT(socketStateChanged(QAbstractSocket::SocketState)));
connect(socket, SIGNAL(encrypted()),
this, SLOT(socketEncrypted()));
connect(socket, SIGNAL(error(QAbstractSocket::SocketError)),
this, SLOT(socketError(QAbstractSocket::SocketError)));
connect(socket, SIGNAL(sslErrors(QList<QSslError>)),
this, SLOT(sslErrors(QList<QSslError>)));
connect(socket, SIGNAL(readyRead()),
this, SLOT(socketReadyRead()));
}
qDebug() << 2;
socket->connectToHostEncrypted("irc.chat.twitch.tv", 443);
QEventLoop loop;
connect(socket, SIGNAL(connected()), &loop, SLOT(quit()));
loop.exec();
qDebug() << 5;
sendData("PASS oauth:" + TwitchAccessToken);
sendData("NICK ThatRedstoneGT");
sendData("JOIN smartguy316");
sendData("PRIVMSG Hello!");
}
声明:
Public:
QSslSocket *socket:
将此作为答案,因为我不确定我是否设法理解了我的观点 在评论中。
您有一个类MainWindow
,其中包含成员socket
。 将事情保持在最低限度,让我们说它是...
class MainWindow {
public:
MainWindow();
void secureConnect();
void sendData(QString text);
QSslSocket *socket:
};
现在,我希望构造函数实现看起来像...
MainWindow::MainWindow ()
: socket(nullptr)
{}
如果在调用 MainWindow::secureConnect
之前未将socket
初始化为 nullptr
,则它将具有一些随机值。 在这种情况下...
if (!socket) {
将失败,这意味着包含...
socket = new QSslSocket(this);
永远不会被执行。
通过测试,您可以在调试器下运行代码,在线上设置断点......
if (!socket) {
并检查 socket
的值。 第一次命中该行时应为 null socket
。 是吗?
相关文章:
- 没有找到相关文章