2011-04-26 89 views
2
通過WebSocket的接收數據包

我想從Javascript發送數據到WebSocket服務器爲Javascript我將如何發送和接收來自服務器的WebSocket在Javascript

我想給這樣的:

Headers 
------- 
Field 1: 2 byte hex 
Field 2: 2 byte hex 
Field 3: 4 byte hex 

Data 
---- 
Field1 : 2 byte hex 
Field1 : 8 byte hex 

從JavaScript,我可以通過

socket = new WebSocket(host); 
... 
socket.send(0xEF); 

發送一個雙字節值,但我想給多個字段,一起 ...比方說0xEF,0x60和0x0042。

我該怎麼做?

而且,如何通過Javascript數據解釋包含來自WebSocket服務器的多個字段?

回答

7

您可以以字符串形式發送數據。例如:

socket.send("hello world"); 

我建議您使用JSON作爲數據格式。您可以將JSON字符串直接轉換爲對象,反之亦然。它非常簡單和有用!

+1

+1爲使用JSON的想法,但我不知道我會這樣做。 – 2011-04-26 18:21:54

3

聽起來像你問的是如何通過WebSocket連接發送二進制數據。

這主要是在這裏找到答案: Send and receive binary data over web sockets in Javascript?

的額外的信息不包括在這個問題的答案了一下:

目前的WebSocket協議和API只允許發送字符串(或任何可以被強制/類型轉換爲字符串)並且收到的消息是字符串。協議的下一次迭代(HyBi-07)支持二進制數據目前正在瀏覽器中實現。

Javascript字符串是UTF-16,每個字符在內部都是2字節。當前的WebSockets負載限於UTF-8。在低於128的UTF-8字符值中需要1個字節進行編碼。值128及以上需要2個或更多字節進行編碼。當您發送Javascript字符串時,它會從UTF-16轉換爲UTF-8。要發送和接收二進制數據(直到協議和API本地支持它),您需要將數據編碼爲與UTF-8兼容的東西。例如,base64。這在上面鏈接的答案中有更詳細的介紹。

+0

關於「Javascript字符串是內部每個字符2字節的UTF-16」,您是否有源代碼?它不取決於文件本身的編碼嗎? – Pacerier 2012-07-17 19:21:07

+1

@Prier:瀏覽器/ javascript引擎內部的字符串編碼不依賴於JavaScript源代碼編碼。內部字符串是UTF-16。更多信息比你想在這裏:http://mathiasbynens.be/notes/javascript-encoding – kanaka 2012-07-17 19:39:15

4

您可以將數據作爲JSON對象發送。

socket.send(JSON.stringify({field1:'0xEF', field2:'0x60',field3: '0x0042'})); 
相關問題