Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

331
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda