Qt上的socket在我发现的有两种,TcpSocket与WebSocket,这次仅涉及WebSocket。
1.首先须要在 .pro文件中引入web
QT += websockets
并包含头文件websocket
#include <QWebSocket>
2.初始化websocket相应方法socket
QWebSocket *websocket; private slots: void onDisconnected();//断开链接后执行方法 void onConnected();//链接成功后执行方法 void onBinaryMessageReceived(QByteArray message);//收到数据后执行方法(此处为收到二进制数据方法) void onTextMessageReceived(QString message)//收到数据后执行方法(此处为收到字符数据方法) void reconnect();//须要重连时执行方法
上述方法中关于接收数据的方法请根据后台发送的数据类型进行选择,不然可能没法接收到数据,Qt内表现数据为空,抓包软件显示有数据。this
3.对接相应的信号槽与方法
信号:url
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);
方法:code
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))); }