2014-05-15 114 views
0

我正在使用Enfora MT4000設備。當發生某些事件時,設備將數據發送到tcp或udp服務器。數據可以以二進制或ASCII格式發送,但我需要使用二進制。節點tcp socket:從Enfora MT4000讀取二進制數據

Enfora公司設備被配置爲與AT命令是這樣的:

AT$EVENT=14,0,7,1,1 
AT$EVENT=14,3,52,14,1578098 

當我配置與ASCII的裝置中,所述服務器在該格式接收數據:

r  13 0 0 $GPRMC,211533.00,A,3321.856934,S,07040.240234,W,0.0,0.0,120514,2.3,W,A*2B 

但是,當我使用二進制,數據如下所示:

$2K� �Dk����a�H 

任何人都知道Node.js如何將二進制da ta從一個插座?我試圖用一個非常簡單的腳本來做到這一點。

// server 
require('net').createServer(function (socket) { 
    console.log("connected"); 
    socket.setEncoding(null); 
    socket.on('data', function (data) { 
     console.log(data.toString()); 
    }); 
}) 

.listen(3041); 

謝謝。

回答

2

'data'事件處理程序中的參數data已經是Buffer。通過調用data.toString()您將該緩衝區轉換爲(默認情況下爲UTF-8)字符串。如果你需要原始的二進制數據,你最好將它保存爲一個Buffer並使用它。

+0

有可能將緩衝區的數據轉換爲javascript的字符串? –

+0

ASCII是UTF-8的一個子集,所以默認的buffer.toString()應該返回正確的結果 – levi

+0

@DaniloAburto目前還不清楚你期待什麼樣的字符串。如果數據是二進制和部分字符串,則可以使用數據。[toString()](http://nodejs.org/docs/latest/api/buffer.html#buffer_buf_tostring_encoding_start_end)同時使用encoding和start和end參數。 – mscdex