WebSocket准备工作
Qt上的socket在我发现的有两种,TcpSocket与WebSocket,此次仅涉及WebSocket。
WebSocket对接
1.首先需要在 .pro文件中引入
QT += websockets
并包含头文件
#include <QWebSocket>
2.初始化websocket相应方法
QWebSocket *websocket;
private slots:
void onDisconnected();//断开连接后执行方法
void onConnected();//连接成功后执行方法
void onBinaryMessageReceived(QByteArray message);//收到数据后执行方法(此处为收到二进制数据方法)
void onTextMessageReceived(QString message)//收到数据后执行方法(此处为收到字符数据方法)
void reconnect();//需要重连时执行方法
上述方法中关于接收数据的方法请根据后台发送的数据类型进行选择,否则可能无法接收到数据,Qt内表现数据为空,抓包软件显示有数据。
3.对接相应的信号槽与方法
信号:
websocket = new QWebSocket();
connect(websocket,SIGNAL(connected()),this,SLOT(onConnected()),Qt::UniqueConnection);
connect(websocket,SIGNAL(disconnected()),this,SLOT(onDisconnected()),Qt::UniqueConnection);
connect(websocket, SIGNAL(binaryMessageReceived(QByteArray)), this, SLOT(onBinaryMessageReceived(QByteArray)),Qt::UniqueConnection);
方法:
void Form::onDisconnected()
{
qDebug()<<"websocket is disconnected";
reconnect();
}
void Form::onConnected()
{
qDebug()<<"connect successful";
QString message = "";
websocket->sendTextMessage(message);
}
void Form::onBinaryMessageReceived(QByteArray message)
{
}
void WalletForm::reconnect()
{
qDebug()<<"websocket reconnected";
websocket->abort();
websocket->open((QUrl(url)));
}
发表回复