簡體   English   中英

Qt QSSlSocket-'connectToHostEncrypted();上的SEGFAULT

[英]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:

將其作為答案,因為我不確定我是否能夠在評論中表達自己的觀點。

您有一個帶有成員socket MainWindow類。 讓事情降到最低限度吧……

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的值。 第一次點擊該行的socket應為null。 是嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM