2017-04-08 13 views
0

UPNPのために送信されるブロードキャストメッセージをリッスンするNodeJSコードがあります。 1つのコードスニペットはポート1900でリッスンし、もう1つのコードはポート1900でUDPのdgramを使用します。どちらのコードでもメッセージは返されません。ネットワーク上でトラフィックがブロードキャストされていることを実証しました。私は両方のコードを同時に実行しないので、ポートの問題を回避できます。 netstat -aを使用すると、コードが実行されているときに使用中のポートが表示されます。UPNPをリッスンするトラフィックがありません

なぜこれらのUPNPメッセージを受信しないのですか?

DGRAM方法のいくつかで遊ん
//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'); 
}); 

答えて

0

と、これは本当によく働くようで:

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); 
}); 
関連する問題