没有得到任何流量侦听 UPNP
Not getting any traffic listening for UPNP
我有一些 NodeJS 代码可以侦听为 UPNP 发送的广播消息。一个代码片段在端口 1900 上侦听,另一段代码在端口 1900 上使用 dgram 进行 UDP。这两段代码都没有 return 任何消息。我用一个实用程序验证了网络上正在广播的流量。我不会同时 运行 两段代码,这样我就避免了任何端口问题。使用 netstat -a 当代码为 运行ning.
时,我能够看到正在使用的端口
为什么我收不到这些 UPNP 消息?
//DServer for UDP
/*dserver = dgram.createSocket('udp4');
dserver.bind('1900', () => {
console.log('Listening on address:' + dserver.address());
});
dserver.on('error', (err) => {
console.log('UDP Server ERROR:' + err);
dserver.close();
});
dserver.on('close', () => {
console.log('UDP Server closed');
});
dserver.on('listening', () => {
console.log('UDP Server listening');
});
dserver.on('message', (msg, rinfo) => {
console.log(msg + '\n' + rinfo);
});*/
//TCP Server ( for testing )
let dserver = net.createServer((socket) => {
socket.on('data', (data) => {
console.log("DATA:" + data.toString());
}).on('error', (err) => {
console.trace('DServer socket.on: error');
console.error(err.stack);
});
}).on('listening', () => {
console.log('DServer Listening');
}).on('connection', () => {
console.log('DServer got a connection');
}).on('close', () => {
//stays open if client closes conx
console.log('DServer Closed');
}).on('error', (err) => {
console.trace('DServer.on: error');
console.error(err.stack);
});
dserver.listen({ port: 1900 }, () => {
console.log('DServer Started Listening');
});
尝试了一些 dgram 方法,这似乎工作得很好:
let dgram = require('dgram');
//DServer for UDP
dserver = dgram.createSocket('udp4');
dserver.bind('1900');//UDP Port all UPNP messages broadcast on
dserver.on('error', (err) => {
console.log('UDP Server ERROR:' + err);
dserver.close();
});
dserver.on('close', () => {
console.log('UDP Server closed');
});
dserver.on('listening', () => {//server start to listen after dserver.bind
console.log('UDP Server listening');
dserver.setMulticastLoopback(true);//NEEDED to allow broadcast packets
//on the network interface, NodeJS documentation has more info.
dserver.setMulticastTTL(128);//This is for sending not needed for recieving
dserver.addMembership('239.255.255.250');//add to broadcast-IP UPNP range
});
dserver.on('message', (msg, rinfo) => {//When receive message print to screen
console.log(msg + '\n' + rinfo);
});
我有一些 NodeJS 代码可以侦听为 UPNP 发送的广播消息。一个代码片段在端口 1900 上侦听,另一段代码在端口 1900 上使用 dgram 进行 UDP。这两段代码都没有 return 任何消息。我用一个实用程序验证了网络上正在广播的流量。我不会同时 运行 两段代码,这样我就避免了任何端口问题。使用 netstat -a 当代码为 运行ning.
时,我能够看到正在使用的端口为什么我收不到这些 UPNP 消息?
//DServer for UDP
/*dserver = dgram.createSocket('udp4');
dserver.bind('1900', () => {
console.log('Listening on address:' + dserver.address());
});
dserver.on('error', (err) => {
console.log('UDP Server ERROR:' + err);
dserver.close();
});
dserver.on('close', () => {
console.log('UDP Server closed');
});
dserver.on('listening', () => {
console.log('UDP Server listening');
});
dserver.on('message', (msg, rinfo) => {
console.log(msg + '\n' + rinfo);
});*/
//TCP Server ( for testing )
let dserver = net.createServer((socket) => {
socket.on('data', (data) => {
console.log("DATA:" + data.toString());
}).on('error', (err) => {
console.trace('DServer socket.on: error');
console.error(err.stack);
});
}).on('listening', () => {
console.log('DServer Listening');
}).on('connection', () => {
console.log('DServer got a connection');
}).on('close', () => {
//stays open if client closes conx
console.log('DServer Closed');
}).on('error', (err) => {
console.trace('DServer.on: error');
console.error(err.stack);
});
dserver.listen({ port: 1900 }, () => {
console.log('DServer Started Listening');
});
尝试了一些 dgram 方法,这似乎工作得很好:
let dgram = require('dgram');
//DServer for UDP
dserver = dgram.createSocket('udp4');
dserver.bind('1900');//UDP Port all UPNP messages broadcast on
dserver.on('error', (err) => {
console.log('UDP Server ERROR:' + err);
dserver.close();
});
dserver.on('close', () => {
console.log('UDP Server closed');
});
dserver.on('listening', () => {//server start to listen after dserver.bind
console.log('UDP Server listening');
dserver.setMulticastLoopback(true);//NEEDED to allow broadcast packets
//on the network interface, NodeJS documentation has more info.
dserver.setMulticastTTL(128);//This is for sending not needed for recieving
dserver.addMembership('239.255.255.250');//add to broadcast-IP UPNP range
});
dserver.on('message', (msg, rinfo) => {//When receive message print to screen
console.log(msg + '\n' + rinfo);
});