QWebSocket 客户端通信
WebSocket 是 HTML5 提供的一种在单个TCP连接上进行全双工通讯的协议。
WebSocket 是的客户端和服务器之间的数据交换变得更加简单,允许服务器端主动向客户端推送数据。在WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
WebSocket 实例
WebSocket 协议本质上是一个基于 TCP 的协议。
为了建立一个 WebSocket连接,客户端浏览器首先要向服务器发起一个 HTTP 请求,这个请求和通常的 HTTP 请求不同,包含了一些附加头信息“Upgrade:WebSocket”表明这是一个申请协议升级的HTTP请求,服务器解析这些附加的头信息然后会产生应答信息返回给客户端,客户端和服务器的WebSocket 连接就建立起来了,爽饭就可以通过这个连接通道自由的传递信息,并且这个连接会持续存在直到客户端或者服务器端的某一方主动的关闭连接。
ps: 想抓个包出来,半天,没抓一个。
#include "echoclient.h"
EchoClient::EchoClient(const QUrl & url, QObject * parent):
QObject(parent),
m_url(url)
{
qDebug() << "WebSocket server:" << url;
connect(&m_webSocket, &QWebSocket::connected, this, &EchoClient::onConnected);//当socket 连接建立后触发的槽函数
connect(&m_webSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(ConnectRefusedError(QAbstractSocket::SocketError)));//当socket出现问题时,触发对应的槽函数
m_webSocket.open(QUrl(url));//建立连接,open 的返回类型为void
}
void EchoClient::onConnected()
{
qDebug() <<"WebSocket connected";
connect(&m_webSocket, &QWebSocket::textMessageReceived,
this, &EchoClient::onTextMessageReceived);
m_webSocket.sendTextMessage(QStringLiteral("Hello, World!"));
}
void EchoClient::onTextMessageReceived(QString message)
{
qDebug() << "Message received:" << message;
// m_webSocket.close();
}
void EchoClient::ConnectRefusedError(QAbstractSocket::SocketError error)
{
qDebug() << error << m_webSocket.errorString() << "嘤嘤婴";//连接错误的原因
m_webSocket.close();//先关闭
m_webSocket.open(QUrl(m_url));//再打开进行连接
}
链接:https://www.runoob.com/html/html5-websocket.html