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))); }