繁体   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