【问题标题】:Not getting any traffic listening for UPNP没有收到任何监听 UPNP 的流量
【发布时间】:2017-09-03 18:14:11
【问题描述】:

我有一些 NodeJS 代码用于侦听为 UPNP 发送的广播消息。一个代码 sn-p 在端口 1900 上侦听,另一位代码使用 dgram 用于端口 1900 上的 UDP。这两个代码都没有返回任何消息。我使用实用程序验证了网络上正在广播流量。我不会同时运行两段代码,这样可以避免任何端口问题。使用 netstat -a 我可以在代码运行时看到正在使用的端口。

为什么我没有收到这些 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');
});

【问题讨论】:

    标签: node.js tcp udp upnp


    【解决方案1】:

    使用了一些 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);
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-09
      • 2017-03-15
      • 1970-01-01
      • 2022-08-19
      相关资源
      最近更新 更多