[英]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.