es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

javascript node.js establecer una conexión socket UDP

Procedente de esta página,
https://nodejs.org/api/dgram.html#class-dgramsocket
Tomé el control de este ejemplo:

const dgram = require('dgram');
const server = dgram.createSocket('udp4');

server.on('error', (err) => {
  console.log(`error del servidor:\n${err.stack}`);
  server.close();
});

server.on('message', (msg, rinfo) => {
  console.log(`el servidor recibió: ${msg} desde ${rinfo.address}:${rinfo.port}`);
});

server.on('listening', () => {
  const address = server.address();
  console.log(`el servidor está escuchando en ${address.address}:${address.port}`);
});

server.bind(41234);
// Imprime: el servidor está escuchando en 0.0.0.0:41234

server.bind() también funcionaría, luego toma un puerto libre, supongo.
Pero el ejemplo no funciona, la respuesta del cliente a 0.0.0.0 no sería recibida en este host.
Entonces cambié a
server.bind(65000, "192.168.0.1");

Pero junto con la dirección IP, las interfaces me obligan a especificar un puerto. ¿Cómo puedo omitir esto?

Gracias

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para omitir especificar un puerto al enlazar a una dirección IP específica, puedes pasar 0 como segundo argumento a server.bind(). Esto le indicará al sistema operativo que elija un puerto disponible al azar para el socket. Por ejemplo, podrías usar:

    server.bind(0, "192.168.0.1");
    

    Esto enlazará a la interfaz 192.168.0.1 y se asignará un puerto disponible al azar. Puedes obtener el puerto asignado usando server.address().port en el callback del evento 'listening'.

Comments are closed.