Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

329
Vistas
¿Cómo hacer que el servidor solo responda después de recibir un mensaje del cliente? (UDP Pinger, enchufes)

Actualmente estoy desarrollando un pinger UDP, donde el cliente debe enviar un mensaje (Ping) y recibir pong 10 veces. Sin embargo, los mensajes se envían 10 veces al mismo tiempo, donde la idea es que el servidor envíe pong de vuelta después de recibir ping, sin que la terminal envíe todo a la vez.

Esto se debe al bucle for alrededor del server.send, del cual estoy al tanto. Simplemente no estoy seguro de cómo puedo hacer que el servidor solo envíe una respuesta después de recibir un mensaje, haciendo que el servidor registre un tiempo diferente para cada mensaje. Espero que mi problema tenga sentido. Hasta ahora se me ha ocurrido esto:

 var host = "127.0.0.1", port = 33333; var dgram = require( "dgram" ); var buffer = require('buffer'); var server = dgram.createSocket( "udp4" ); var date1 = new Date() var today = Buffer.from(date1) server.on('listening', () => { const address = server.address(); console.log(`server listening on port ` + 4000 + ' and address 127.0.0.1'); }); server.on( "message", function( msg, rinfo ) { for (let message = 0; message < 10; message++){ const message = 'Ping' server.send( message, 0, msg.length, rinfo.port, rinfo.address, date1 ); console.log( rinfo.address + ':' + rinfo.port + ' - ' + msg + ' . ' + date1 ); }}); server.on('error', (err) => { console.log(`server error:\n${err.stack}`); server.close(); }); server.on("close", function(){ console.log("\n Client is offline") }) server.bind( port, host );

Lado del cliente:

 var host = "127.0.0.1", port = 33334; var dgram = require( "dgram" ); var buffer = require('buffer'); var client = dgram.createSocket( "udp4" ); var date1 = new Date() var today = Buffer.from(date1) console.log(date1) client.on('listening', () => { const address = client.address(); console.log(`client listening on port ` + 4000 + ' and address 127.0.0.1'); }); client.on( "message", function( msg, rinfo ) { console.log( rinfo.address + ':' + rinfo.port + ' - ' + msg + ' - ' + date1 ); }); client.on('error', (err) => { console.log(`server error:\n${err.stack}`); server.close(); }); client.on("close", function(){ console.log("\n Client is offline") }) client.bind( port, host ); //client listens to a port var message = "Pong!" client.send(message, 0, message.length, 33333, "127.0.0.1", date1 );

Hasta ahora, el código también imprime la hora en que se envía cada mensaje (obtengo la misma hora para todos los mensajes enviados). Cualquier idea sobre cómo podría incorporar el tiempo de ida y vuelta después de que se hayan enviado los 10 pings y pongs sería increíble.

¡Muchas gracias de antemano!

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Solo necesita contar la cantidad de veces que se recibe un ping y verificar si es igual a diez:

 var numPingPongs = 0; server.on( "message", function( msg, rinfo ) { if (numPingPongs < 10) { const message = 'Ping' server.send( message, 0, msg.length, rinfo.port, rinfo.address, date1 ); console.log( rinfo.address + ':' + rinfo.port + ' - ' + msg + ' . ' + date1 ); numPingPongs++; } else { // Reached ten ping pongs, do whatever here. } });

Asumí que querrías calcular la latencia o lo que sea en el lado del servidor, así que escribí esto para el servidor. Pero también puede aplicar la lógica al cliente.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda