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

184
Views
Enlace de socket antes de enviar con dgram en el cliente

Estoy desarrollando un programa node.js que se conecta a través de UDP con otro programa que se ejecuta en la misma máquina. Actualmente estoy enviando datos como este:

 import dgram = require("dgram"); const client = dgram.createSocket("udp4"); //Some code to structure the message how the server wants it const message = Buffer.alloc(413); message.write("TEST\0"); client.send(message, 0, message.length, 49000, '127.0.0.1', (err) => { if (err) { this.client.close(); console.error(err); } });

Esto funciona bien, sin embargo, quiero hacer el código en dos pasos. Primero abra la conexión y luego envíe el mensaje. Este es el código que escribí (saltándome algunas cosas repetidas):

 //const message same as above this.client.bind(49000, '127.0.0.1', (err) => { if (err) { this.client.close(); console.error(err); } else { this.client.send(message, 0, message.length, (err) => { if (err) { this.client.close(); console.error(err); } }); } });

Esto arroja el error: throw new ERR_SOCKET_BAD_PORT(name, port, allowZero); RangeError [ERR_SOCKET_BAD_PORT]: Port should be > 0 and < 65536. Received 0.

Editar:

Gracias leitning! .connect() es exactamente lo que necesitaba. Ahora tengo otro problema. Cuando hago .send() directamente sin llamar a .connect() antes de poder recibir datagramas entrantes creando un .on('message') en el cliente. Pero cuando me conecto y luego envío, el oyente no recibe ningún mensaje entrante. Probé esto con Wireshark y hay mensajes entrantes.

El código es:

 import dgram = require("dgram"); const client = dgram.createSocket("udp4"); const message = Buffer.alloc(413); message.write("TEST\0"); client.connect(49000,'127.0.0.1',err => { if (err) console.error(err); client.send(message, 0, message.length, 49000, '127.0.0.1', (err) => { if (err) { this.client.close(); console.error(err); } }); }); client.on('message',(data) => { console.log(data); });

¿Hay algo que me perdí de los documentos sobre cómo recibir mensajes después de hacer .connect() ?

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Cuando vincula un puerto, está reclamando ese puerto del sistema operativo con el fin de enviar y recibir. No tiene nada que ver con el lugar al que se enviarán los mensajes.

Al vincular a localhost: 49000, los paquetes que envíe declararán que provienen del puerto localhost 49000. También puede escuchar el socket vinculado para los mensajes entrantes al puerto localhost 49000.

Aún debe declarar un destinatario para los mensajes que está tratando de enviar. Obtiene un error de puerto no válido porque la función está interpretando su argumento 0 como el puerto de destino. dgram.send docs

Parece que la funcionalidad que está tratando de usar está cubierta en el método dgram.connect .

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!