2017-06-23 103 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); 
});