我试图通过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:发布于 2016-07-17 17:26:00
把这作为一个答案,因为我不确定我是否在评论中表达了我的观点。
您有一个带有成员MainWindow的类socket。把事情保持在最低限度,比方说.
class MainWindow {
public:
MainWindow();
void secureConnect();
void sendData(QString text);
QSslSocket *socket:
};现在,我希望构造函数实现看起来像.
MainWindow::MainWindow ()
: socket(nullptr)
{}如果在调用socket之前不将MainWindow::secureConnect初始化为nullptr,那么它将有一些随机值。那样的话..。
if (!socket) {将失败意味着包含..。
socket = new QSslSocket(this);永远不会被处决。
通过测试,您能否在调试器下运行代码,在行上设置断点.
if (!socket) {并检查socket的值。第一次命中该行时,socket应该为null。是吗?
https://stackoverflow.com/questions/38418097
复制相似问题