comunicacion-tcp-nodejs

Cómo hacer comunicaciones TCP con Node.js y el modulo NET

En Node.js, podemos utilizar el módulo net para crear servidores y clientes TCP de manera sencilla.

El protocolo TCP proporciona una vía estable y confiable para la transmisión de datos en la web, garantizando la entrega ordenada y sin errores de los paquetes.

Algunas de sus características son:

  • Estabilidad: TCP establece conexiones persistentes entre el cliente y el servidor, lo que garantiza la entrega ordenada y sin errores de los datos transmitidos.
  • Fiabilidad: El mecanismo de confirmación de recepción de paquetes, TCP garantiza que los datos lleguen a su destino de manera intacta y en el orden correcto
  • Control de Congestión: TCP incluye algoritmos de control de congestión que regulan el flujo de datos entre los extremos de la conexión

La comunicación TCP se emplea en una amplia gama de aplicaciones web, desde la transferencia de archivos hasta la navegación segura por internet.

Ejemplo de implementación de TCP en Node.js

Servidor TCP básico

Para crear un servidor TCP básico en Node.js, podemos utilizar el módulo net. El siguiente ejemplo muestra cómo crear un servidor TCP que escucha en un puerto específico y maneja las conexiones entrantes:

import net from 'node:net';

// Crear servidor TCP
const server = net.createServer((socket) => {
  console.log('Cliente conectado');

  // Evento al recibir datos del cliente
  socket.on('data', (data) => {
    console.log('Datos recibidos:', data.toString());

    // Enviar datos de vuelta al cliente
    socket.write('Datos recibidos por el servidor: ' + data.toString());
  });

  // Evento cuando se cierra la conexión del cliente
  socket.on('close', () => {
    console.log('Cliente desconectado');
  });

  // Manejar errores de conexión
  socket.on('error', (err) => {
    console.error('Error en conexión:', err);
  });
});

const puerto = 3000;
server.listen(puerto, () => {
  console.log(`Servidor TCP iniciado en puerto ${puerto}`);
});

En este ejemplo:

  • Se crea un servidor TCP que escucha en el puerto 3000.
  • Cuando un cliente se conecta, se imprime un mensaje en la consola.
  • Cuando el servidor recibe datos del cliente, los imprime en la consola y envía una respuesta al cliente.
  • Cuando un cliente se desconecta, se imprime un mensaje en la consola.

Para probar este servidor TCP, necesitarás un cliente que pueda conectarse y enviar datos. Puedes usar una herramienta como telnet en la línea de comandos o escribir un cliente en JavaScript para probarlo 👇

Cliente TCP en Node.js

Para conectarse a un servidor TCP desde un cliente en Node.js, podemos utilizar el módulo net también. El siguiente ejemplo muestra cómo crear un cliente TCP que se conecta a un servidor en un host y puerto específicos:

import net from 'node:net';

const client = new net.Socket();

const puerto = 3000;
const host = 'localhost'; // Cambia por el host donde está el servidor

client.connect(puerto, host, () => {
  console.log('Conectado al servidor TCP');
  client.write('Hola desde el cliente TCP');
});

client.on('data', (data) => {
  console.log('Datos recibidos del servidor:', data.toString());
  client.end();
});

client.on('close', () => {
  console.log('Conexión cerrada');
});

client.on('error', (err) => {
  console.error('Error de conexión:', err);
});

Este cliente TCP se conectará al servidor que creamos anteriormente y enviará un mensaje. Cuando el servidor reciba el mensaje, lo imprimirá en la consola y enviará una respuesta al cliente, que también se imprimirá en la consola del cliente.

Para probarlo,

  • Ejecuta el servidor Node.js
  • Ejecuta el cliente Node.js.
  • Deberías ver que el cliente se conecta al servidor, envía un mensaje, recibe una respuesta del servidor, y luego se desconecta.

Descarga el código

Todo el código de esta entrada está disponible para su descarga en Github github-full