Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

325
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!