簡體   English   中英

使用Node.js接收特定的TCP命令並進行處理

[英]Receiving specific TCP commands with nodejs and handling them

我的本地設備有一台通過TCP發送JSON數據的設備:

ex. {"cmd": "listactions", "id": 13, "value": 100}

數據從端口8000上的192.168.0.233發送(我已經用wireshark檢查過)

我想(和我的家庭服務器一起)使用nodejs截獲這些特定命令,並通過pusher發送它們。

我對nodejs的經驗很少,似乎無法正常工作。 我嘗試了以下方法:

net = require('net');

var server = net.createServer(function(sock) {
    sock.setEncoding('utf8');

    sock.on('data', function (data) {
        // post data to a server so it can be saved and stuff
        console.log(data);

        // close connection
        sock.end();
    });

    sock.on('error', function (error) {
        console.log('******* ERROR ' + error + ' *******');

        // close connection
        sock.end();
    });

});

server.on('error', function (e) {
    console.log(e);
});

server.listen(8000, '192.168.0.233', function(){
    //success, listening
    console.log('Server listening');
});

但是它抱怨EADDRNOTAVAIL ,從研究中我得知這意味着該端口正在使用中。。。我不明白,因為我能夠使用Wireshark。

正確的方法是什么?

Wireshark不會在所有端口上監聽。 它使用內核驅動程序(帶有libpcap或winpcap)來“嗅探”離線數據。 也就是說,它不位於任何東西之間。 這不是一個中間人。 它只是在發送時接收數據的副本。

如果您希望應用程序接收數據,則需要在該端口上偵聽。 您應該使用netstat找出正在偵聽端口8000的進程並將其殺死。 然后,您可以在端口8000上偵聽。

從理論上講,您可以使用libpcap來獲取數據,但這太瘋狂了。 有大量的開銷,無論如何都必須在該端口上偵聽某些內容(畢竟這是一個TCP連接),並且篩選出想要的內容非常復雜。 基本上,您將重新實現網絡堆棧。 別。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM