Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用NodeJ接收特定的TCP命令并对其进行处理_Node.js_Tcp - Fatal编程技术网

Node.js 使用NodeJ接收特定的TCP命令并对其进行处理

Node.js 使用NodeJ接收特定的TCP命令并对其进行处理,node.js,tcp,Node.js,Tcp,我在本地有一台通过TCP发送JSON数据的设备: ex.{“cmd”:“listactions”,“id”:13,“value”:100} 数据从192.168.0.233端口8000 (我已经和wireshark核实过了) 我想(用我的主服务器)用nodejs截取这些特定命令,并用发送它们 我对nodejs几乎没有经验&似乎无法让它正常工作。我尝试了以下方法: net = require('net'); var server = net.createServer(function(sock)

我在本地有一台通过TCP发送JSON数据的设备:

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

数据从
192.168.0.233
端口
8000
(我已经和wireshark核实过了)

我想(用我的主服务器)用nodejs截取这些特定命令,并用发送它们

我对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连接),要过滤掉你想要的东西非常复杂。基本上,您将重新实现网络堆栈。不要