【发布时间】:2018-09-05 07:47:19
【问题描述】:
有 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
【问题讨论】:
-
我假设您已经检查了
QWebSocket::error、QWebSocket::errorString等返回的值? -
还要检查
QWebSocket::closeReason(),可能是socket关闭了,因为如果sendBinaryMessage返回0,说明没有数据发送。 -
@G.M.,是的,我已经检查过了,他们似乎不是问题制造者。对 ManuelH 来说,是的,这很重要。我必须检查一下。 ——总的来说,我似乎找到了根本原因。我没有检查
connected()信号。代码运行速度太快,无法等待此信号发出。
标签: c++ qt websocket client-server binary-data