如何将套接字绑定到多个端口NodeJS

我build立了一个节点应用程序,它从IP地址的端口接收数据包,并将这些内容提供给网页。 这个IP地址有stream量通过两个端口,9999和10000.我的应用程序有以下代码:

var PORT_ONE = 9999; var PORT_TWO = 10000; var SENSOR = '239.0.0.1'; var client = require('dgram').createSocket('udp4'); var dns = require('dns'); /* Client starts listening on IP */ client.on('listening', function () { console.log('UDP Client listening on ' + SENSOR + ":" + PORT_TWO); client.setMulticastTTL(1); client.addMembership(SENSOR); }); /* Client receives a message */ client.on('message', function (message, remote) { var tempMessage = message.toString(); //cast Buffer var to String var delimiter = "\n"; var tempData = tempMessage.split(delimiter); console.log('From: ' + remote.address + ':' + remote.port +' - \n' + message); var data = { ip: [SENSOR], info: [tempData] }; sendMessage(data); }); client.bind(PORT_ONE); client.bind(PORT_TWO); //error here 

当我在terminal中运行我的节点应用程序时,我收到错误

 dgram.js:163 throw new Error('Socket is already bound'); 

其中dgram.js是Nodejs库的一部分。 绑定到PORT_TWO时出现错误。 有没有办法将套接字绑定到多个端口?

       

网上收集的解决方案 "如何将套接字绑定到多个端口NodeJS"

我想在这里添加我的2美分,我通常做的是创build一个端口和Ips数组,然后把循环绑定到他们一个接一个

 udpclients = [5550,5551]; udpsockets=[] var dgram = require('dgram'); udpclients.forEach(function(port){ var udpServer = dgram.createSocket('udp4'); udpServer.bind(port,'127.0.0.1') udpServer.on('listening', function() { var address = udpServer.address() console.log("listening"+address.address+" port::"+address.port) }); udpServer.on('message', function(msg, rinfo) { console.log("message received :: "+ msg +" address::"+rinfo.address+ "port = "+ rinfo.port ) }); }); 

或者,您可以绑定多个套接字,将它们包装成stream,然后合并stream,以获得单个套接字的感觉。