2017-06-23 74 views
0

我试图用uWebSockets库来读取来自Web客户端发送的二进制数据ArrayBuffer。读uint8array直接从uWebsockets服务器

我发现在描述这个文本/ BLOB数据的情况下,回购问题的问题,但我想分析uint8array数据从Web客户端进来:

我使用的是非常简单的例子,客户端:

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下的插槽中。文/ BLOB例如不工作,试图读取它作为一个uint8_t阵列是不行的,我不能为我的生活弄清楚如何阅读,这样的数据是可用的。需要注意的是回声返回给客户端也不过工作 - 我的东西拿回来,我把

回答

0

当你准备在客户端的消息字符串,您将其发送到服务器之前,试着在后面加上一个零。字符'\ 0' 到最后。

socket.addEventListener('open', function(event){ 
    var message = "message to send to the server" + '\0'; 
    var testUintArray = new Uint8Array(stringToAsciiCodeArray(message)); 
    socket.send(testUintArray); 
});