Skip to content

Programación de Sockets en Delphi: Creando Aplicaciones Cliente/Servidor

La programación de sockets es fundamental en el desarrollo de aplicaciones que requieren comunicación entre computadoras en una red.

En Delphi, los componentes TSocket y TServerSocket ofrecen un marco simplificado para manejar conexiones de red, permitiendo a los desarrolladores construir aplicaciones de comunicaciones complejas con relativa facilidad.

Configuración de un Entorno de Sockets en Delphi

Antes de sumergirnos en el código, es importante configurar correctamente el entorno de desarrollo para usar sockets en Delphi:

  1. Instalación de Componentes: Asegúrate de que los componentes TSocket y TServerSocket estén instalados y disponibles en el IDE de Delphi. Estos componentes a menudo se encuentran en la paleta ‘Internet’ o ‘Indy Clients’ y ‘Indy Servers’ si estás usando Indy sockets.
  2. Diseño de la Aplicación: Decide la arquitectura de tu aplicación. ¿Será el servidor capaz de manejar múltiples clientes simultáneamente? ¿Qué protocolos de comunicación utilizarás (TCP, UDP)?

Ejemplo de Aplicación Servidor en Delphi

Vamos a crear un servidor simple que escuche las conexiones de los clientes y responda a los mensajes recibidos. Este servidor usará TServerSocket.

Creación del Servidor: Configura un nuevo proyecto en Delphi y coloca un componente TServerSocket en el formulario. Configura las propiedades necesarias como el puerto de escucha.

procedure TForm1.FormCreate(Sender: TObject);
begin
  ServerSocket1.Port := 1234;  // Elige un puerto adecuado
  ServerSocket1.Active := True;  // Activa el servidor para escuchar conexiones
end;

Manejo de Clientes: Implementa el evento OnClientConnect para gestionar nuevas conexiones y el evento OnClientRead para leer los datos enviados por los clientes.

procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  Memo1.Lines.Add('Cliente conectado: ' + Socket.RemoteAddress);
end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
  ReceivedText: string;
begin
  ReceivedText := Socket.ReceiveText;
  Memo1.Lines.Add('Recibido: ' + ReceivedText);
  // Envía una respuesta
  Socket.SendText('Echo: ' + ReceivedText);
end;

Ejemplo de Aplicación Cliente en Delphi

El cliente se conectará al servidor y enviará mensajes, esperando la respuesta del servidor. Utilizaremos TSocket para este propósito.

Creación del Cliente: En un nuevo proyecto Delphi, coloca un TSocket, dos TEdit (uno para el mensaje y otro para la dirección IP del servidor), y un TButton para enviar el mensaje.

procedure TForm1.Button1Click(Sender: TObject);
begin
  ClientSocket1.Host := Edit1.Text; // Dirección IP del servidor
  ClientSocket1.Port := 1234;
  ClientSocket1.Open;  // Abre la conexión
  ClientSocket1.Socket.SendText(Edit2.Text);  // Envía el texto al servidor
end;

procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
var
  ReceivedText: string;
begin
  ReceivedText := Socket.ReceiveText;
  Memo1.Lines.Add('Respuesta del servidor: ' + ReceivedText);
end;

Manejo de Conexiones Concurrentes

En aplicaciones del mundo real, los servidores deben manejar múltiples clientes simultáneamente. Esto se puede lograr mediante el uso de threads, donde cada conexión de cliente se maneja en un hilo separado. Esto evita que la interfaz de usuario se bloquee y mejora el rendimiento del servidor al procesar cada solicitud de cliente en paralelo.

La programación de sockets en Delphi utilizando TSocket y TServerSocket ofrece una poderosa plataforma para desarrollar aplicaciones cliente/servidor. Con la capacidad de manejar múltiples conexiones concurrentemente y la flexibilidad de trabajar con diferentes protocolos, Delphi se posiciona como una herramienta valiosa para los desarrolladores de aplicaciones de red.