Qt QSSlSocket - SEGFAULT on 'connectToHostEncrypted();'

Qt QSSlSocket - SEGFAULT on 'connectToHostEncrypted();'

本文关键字:connectToHostEncrypted QSSlSocket on Qt SEGFAULT      更新时间:2023-10-16

我正在尝试通过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。 是吗?

相关文章:
  • 没有找到相关文章