使用nodejs接收特定的TCP命令并处理它们

时间:2015-06-05 14:42:33

标签: node.js tcp

我的本​​地设备通过TCP发送JSON数据:

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

数据从端口192.168.0.233上的8000发送 (我用wireshark检查了这个)

我想(使用我的主服务器)拦截具有nodejs&的那些特定命令。通过pusher发送它们。

我对nodejs& amp;似乎无法让这个工作。我尝试了以下方法:

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。

这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

Wireshark不会监听所有端口。它使用内核驱动程序(使用libpcap或winpcap)来“嗅探”线路上的数据。也就是说,它不介于任何东西之间。这不是一个中间人。它只是在发送数据时收到一份数据。

如果您希望它接收数据,您的应用程序需要侦听该端口。您应该使用netstat来确定正在侦听端口8000的进程并将其终止。然后,您可以在端口8000上收听。

理论上你可以使用libpcap来获取你的数据但这很疯狂。有大量的开销,无论如何都必须在该端口上监听(毕竟这是一个TCP连接),过滤掉你想要的东西是非常复杂的。基本上,您将重新实现网络堆栈。不。