我正在尝试使用uWebSockets库来读取从Web客户端发送的二进制ArrayBuffer数据。
我发现了一个关于repo问题的问题,这些问题描述了text / blob数据的情况,但我想解析来自Web客户端的uint8array数据:
我使用的是非常简单的示例客户端:
int main()
{
uWS::Hub h;
h.onMessage([](uWS::WebSocket<uWS::SERVER> *ws, char *message, size_t length, uWS::OpCode opCode) {
uint8_t messageString [length]; //Create char array with length of message length
cout << "length: " << length << endl;
for (int i = 0; i < length; i++) { //Iterate through each character in the message
messageString[i] = (uint8_t)message[i]; //Add message character to messageString
}
cout << "Message: " << &messageString[1] << endl;
ws->send (message, length, opCode);
});
h.listen (3000);
h.run();
}
在客户端我做:
{
ws = new WebSocket(wsUri);
ws.binaryType = "arraybuffer";
ws.onopen = function (evt) { onOpen(evt) };
ws.onclose = function (evt) { onClose(evt) };
ws.onmessage = function (evt) { onMessage(evt) };
ws.onerror = function (evt) { onError(evt) };
}
并向套接字发送uint8array
。 text / blob示例不起作用,尝试将其作为uint8_t
数组读取不起作用,我不能在我的生活中弄清楚如何读取这些数据以使数据可用。请注意,回到客户端的回声确实有效 - 我收回了我的内容。
答案 0 :(得分:0)
从客户端读取数据并对其进行响应非常简单:
h.onMessage([](uWS::WebSocket<uWS::SERVER> *ws, char *message, size_t, length, uWS::OpCode opCode) {
std::string receivedMessage(message, length);
ws->send("Reponse from server", uWS::OpCode::BINARY);
});