Есть C ++ Qt клиент и сервер. Следующий код работает нормально, и соединение между клиентом и сервером происходит:
QWebSocket webSocket; // defined somewhere
...
QUrl url;
url.setScheme("ws"); // SSL encryption disabled
url.setHost(serverName); // "127.0.0.1" (can be "www.abc.com" too)
url.setPort(portNumber); // 2000
webSocket.open(url); // connects with the server properly
PRINT(url.toString()); // output: "ws://127.0.0.1:2000"
При отправке двоичных данных функция возвращает 0 вместо количества байтов:
// though the message.size() is 80 bytes; the method returns 0
webSocket.sendBinaryMessage(QByteArray(message.data(), message.size()));
Обратите внимание, что QWebSocketServer
работает как положено.
У нас также есть клиент Javascript. Это соединяет и отправляет двоичное сообщение правильно. Единственное дополнение в этом клиенте ниже:
webSocketJS.binaryType = "arraybuffer"; // <--- Javascript code
Но такого положения нет в QWebSocket
, или я, возможно, пропустил его.
Вопрос : Как правильно отправить двоичные данные через веб-соединение?
Для тех, кто заинтересован, [псевдо] код сервера выглядит следующим образом:
auto pWebSocket = WebServer.nextPendingConnection();
QObject::connect(pWebSocket, &QWebSocket::binaryMessageReceived,
[&] (const QByteArray& message) { DataRead(message, rManager); }); // This slot is not called as of now