Qt websocket,连接到服务器
Qt websocket, connect to server
我正在尝试连接到"wss://api.huobi.pro/ws"。连接后,我必须使用消息"{"id"订阅频道:"wanbtc","sub":"market.wanbtc.depth.step0"}">
auto ws = new WebSocketSync;
ws->setIs_display_scan_speed(new bool(false));
QJsonObject json;
json["sub"] = "market.wanbtc.depth.step0";
json["id"] = "wanbtc";
ws->set_url("wss://api.huobi.pro/ws");
ws->set_register_message(QJsonDocument(json).toJson(QJsonDocument::Compact));
ws->open();
代码结果:
[Websocket] Current soket state: QAbstractSocket::ConnectingState
[Websocket] Current soket state: QAbstractSocket::ConnectedState
[Websocket] Connected to server "wss://api.huobi.pro/ws"
[Websocket] Send message to server "{"id":"wanbtc","sub":"market.wanbtc.depth.step0"}"
但是套接字不发送任何数据之后
类似的代码适用于节点.js
const moment = require('moment');
const WebSocket = require('ws');
const pako = require('pako');
const WS_URL = 'wss://api.huobi.pro/ws';
var orderbook = {};
exports.OrderBook = orderbook;
function handle(data) {
console.log('received', data.ch, 'data.ts', data.ts, 'crawler.ts', moment().format('x'));
let symbol = data.ch.split('.')[1];
let channel = data.ch.split('.')[2];
switch (channel) {
case 'depth':
orderbook[symbol] = data.tick;
//console.log(data.tick);
break;
}
}
function subscribe(ws) {
var symbols = ['wanbtc'];
for (let symbol of symbols) {
var message = JSON.stringify({
"sub": `market.${symbol}.depth.step0`,
"id": `${symbol}`
});
console.log('send to ws ' + message);
ws.send(message);
}
}
function init() {
var ws = new WebSocket(WS_URL);
ws.on('open', () => {
console.log('connect to ' + WS_URL);
subscribe(ws);
});
ws.on('message', (data) => {
let text = pako.inflate(data, {
to: 'string'
});
let msg = JSON.parse(text);
if (msg.tick) {
// console.log(msg);
handle(msg);
}
});
}
init();
可能是什么原因?在node.js上工作,而不是在Qt上工作。 需要找到QWebsocket的替代品吗?
编辑 1:WebSocketSync.cpp
WebSocketSync::WebSocketSync()
{
connect(&m_socket, &QWebSocket::connected, this, [=]{
qDebug() << "[Websocket] Connected to server" << m_socket.request().url().toString();
if (m_is_need_to_register_channel) {
qDebug() << "[Websocket] Send message to server" << m_register_message;
m_socket.sendTextMessage(m_register_message);
}
});
connect(&m_socket, &QWebSocket::textMessageReceived, this, [=](const QString & message) {
qDebug() << message;
});
}
void WebSocketSync::set_url(const QString &url)
{
// qDebug() << "[Websocket] Server url setted:" << url;
m_url.setUrl(url);
}
void WebSocketSync::set_register_message(const QString &url)
{
// qDebug() << "[Websocket] Register message setted:" << url;
m_is_need_to_register_channel = true;
m_register_message = url;
}
void WebSocketSync::open()
{
// qDebug() << "[Websocket] Open url:" << m_url;
m_socket.open(m_url);
}
原因是服务器发送了二进制数据。我需要为此连接使用QWebSocket::binaryMessageReceived
。现在我需要弄清楚如何处理二进制数据 (\x1F\x8B\b\x00\x00(
相关文章:
- QTcpSocket在不阻塞GUI的情况下重新连接到服务器
- C++套接字客户端到 Python 服务器未创建连接
- 计算出有多少客户端可以连接到我正在使用的一些tcp服务器代码
- 在 QNX 中,如何管理服务器和客户端之间的 IPC 连接?
- QTcpSocket 在 RemoteHostClosedError 后重新连接到服务器时无法传输数据
- 如何在Qt c++中使用Secure WebSocket与服务器连接
- NAS(使用 qt/linux)- 无法建立简单的音频服务器连接测试
- C#客户端与C 服务器连接时停止,但是在与C#服务器连接时工作正常
- 如何将C++应用程序与节点.js服务器连接以获取 JSON 数据
- C++Builder-使用TIdTCPServer以编程方式创建TCP服务器连接
- 将非 IOCP 客户端与 IOCP 服务器连接
- 将 Arduino MQTT 客户端与 Node JS MQTT 服务器连接
- 提高客户端-服务器连接的稳定性
- 将web服务器连接到另一个应用程序
- Flash客户端c++服务器连接被对等方重置
- Couchbase C API-多个服务器连接
- c++服务器连接问题
- 正在连接IPv4客户端到IPv6服务器:连接拒绝
- Python客户端- c++服务器连接被拒绝错误
- 在C++中检测本地网络上的客户端-服务器连接设备