2015-11-18 2 views
1

Я пытаюсь отправить изображение (.png) как блобы к яваскрипту клиенту:C# websocket: как я могу отправить двоичные данные клиенту?

static Byte[] imageResponse(string pngPath) 
    { 
     Byte[] image = System.IO.File.ReadAllBytes(pngPath); 
     ulong n = (ulong) image.Length; 
     byte[] data = new byte[n + 10]; 
     data[0] = 130; // binary ? 
     data[1] = 127; 
     Byte[] na = BitConverter.GetBytes(n); // correct endinaness? 
     Array.Copy(na, 0, data, 2, 8); 
     Array.Copy(image, 0, data, 10, (int) n); 
     return data; 
    } 

string path = "C:/tmp/crl3400.png"; 
Byte[] bresponse = imageResponse(path); 
stream.Write(bresponse, 0, bresponse.Length); 

Однако в клиенте я не получаю никакого сообщения:

var socket = new WebSocket("ws://127.0.0.1:80"); 
socket.binaryType = "arraybuffer"; // allow both text and binary data to be transfered. 
socket.onopen = function (event) { 
     alert("WebSocket opened!"); 
     socket.send("Hello server!"); 
    }; 
    socket.onmessage = function (event) { 
     alert("onmessage"); 
     var arrayBufferView = new Uint16Array(event.data); 
     var blob = new Blob([arrayBufferView], { type: "image/png" }); 
     var urlCreator = window.URL || window.webkitURL; 
     var imageUrl = urlCreator.createObjectURL(blob); 
     var img = document.querySelector("#image"); 
     img.src = imageUrl; 
    }; 
    socket.onerror = function (event) { 
     alert("Error"); 
    } 

Что может быть неправильно? Вещи работали, когда я отправил текст «Привет, клиент!». Я не получаю сообщение об ошибке. На сервере я получаю «Привет, сервер!». хорошо.

+0

Должно ли это быть Uint8Array, а не Uint16? – TYY

ответ

1

enter image description here

msg.data является тип Blob, так что вы просто использовать urlCreator.createObjectURL (BLOB); метод bla bla bla ....

Смежные вопросы