2016-03-31 62 views
0

我試圖從Node.js「net」模塊讀取來自Arduino服務器的數據。實際上,除錯誤處理外,一切都很順利。Node.js.事件:'錯誤'未被解僱

問題出在「錯誤」事件。它並沒有被解僱。我剛剛關閉服務器,「數據」事件停止,但「錯誤」事件沒有被解僱。

這裏是最簡單的例子。

var net = require('net'); 

var socket = new net.Socket(); 
var config = { 
    port: 5003, 
    host: '192.168.1.66' 
}; 

function connect() { 
    socket.connect(config, function() { 
    console.log('Connected to: ' + socket.remoteAddress + ':' + socket.remotePort); 
    }); 
} 

// This event is working. 
socket.on('data', function() { 
    console.log('Data...'); 
}); 

// This is never fired. 
socket.on('error', function() { 
    console.log('Error...'); 
}); 

connect(); 

任何想法是哪裏的問題?

+0

您是否看到錯誤?它只會在錯誤時被解僱。 – jmugz3

回答

0

Arduino服務器在關閉時可能會正確關閉連接(無錯誤)。收聽'關閉'事件:

socket.on('close', function (had_error) { 
    console.log('Connection closed with' + (had_error ? '' : 'out') + ' error.'); 
}); 

如果這樣不起作用,請嘗試'timeout'事件。

+0

剛剛嘗試過'close'事件,它沒有被解僱。 'timeout'事件被觸發了,但是當Arduino沒有數據時它也被觸發。我已經將超時設置爲3秒,數據來自Arduino每3秒。因此,我得到超時數據... –

+0

@DmytroDanylevskyi我很驚訝地發現,關閉事件沒有解僱。如果將超時設置爲比數據延遲更長(如10秒),則可以檢測到數據已停止觸發。 – Paulpro

+0

謝謝,但我不確定這是個好主意。因爲我不知道數據刷新之間的延遲... –