Skip to content
mobius1qwe edited this page Oct 15, 2026 · 5 revisions

Home > Primeiro servidor e cliente

Primeiro servidor e primeiro cliente

Vale para a 1.1 em diante · Delphi e Lazarus · Nível: iniciante

Em uma frase: em 5 minutos, um programa que responde pong quando alguém acessa http://localhost:8000/ping, e outro programa que faz essa pergunta.

Você vai precisar: o RAL instalado (Instalação) com o motor Indy (ou outro, veja a tabela no fim).

Não sabe o que é servidor, rota ou motor? Leia antes O que é o PascalRAL.

1. Crie o projeto

Delphi Lazarus
Novo projeto File > New > Console Application - Delphi Project > New Project... > Program
Ligar ao RAL já está, pelo library path da instalação Project > Project Inspector > Add > New Requirement: pascalral e indyral
Salvar File > Save All, numa pasta sua idem

2. Cole o servidor

Apague tudo o que a IDE escreveu e cole. O mesmo código serve para os dois.

program PrimeiroServidor;

{$IFDEF FPC}{$MODE DELPHI}{$ENDIF}
{$APPTYPE CONSOLE}

uses
  {$IFDEF UNIX}cthreads,{$ENDIF} // Linux: obrigatório, e sempre o primeiro
  SysUtils,
  RALServer, RALRequest, RALResponse, RALConsts, RALMIMETypes,
  RALIndyServer; // o motor: troque aqui para usar outro

// o que a rota faz: responder "pong" em texto
procedure Ping(ARequest: TRALRequest; AResponse: TRALResponse);
begin
  AResponse.Answer(HTTP_OK, 'pong', rctTEXTPLAIN);
end;

var
  Servidor: TRALServer;
begin
  Servidor := TRALIndyServer.Create(nil); // o motor, de novo
  try
    Servidor.CreateRoute('ping', Ping, 'responde pong'); // endereço /ping
    Servidor.Port := 8000;
    Servidor.Start;
    WriteLn('No ar: abra http://localhost:8000/ping no navegador');
    WriteLn('Tecle Enter para parar');
    ReadLn;
  finally
    Servidor.Stop;
    Servidor.Free;
  end;
end.

3. Rode e teste

  1. F9 (Run). Abre uma janela preta com a mensagem "No ar".
  2. No navegador, abra http://localhost:8000/ping. Aparece pong.
  3. Abra http://localhost:8000/xyz: aparece um erro 404, porque essa rota não existe.
  4. Volte à janela preta e tecle Enter para parar.

Na linha de comando, o mesmo teste: curl http://localhost:8000/ping.

Tip

O Windows pode perguntar se libera o programa no firewall. Para testar só na sua máquina (localhost) não precisa liberar; para outro computador acessar, precisa.

4. O cliente: outro programa que chama o servidor

Crie outro projeto console (no Lazarus, requisitos pascalral e indyral) e cole. Deixe o servidor rodando.

program PrimeiroCliente;

{$IFDEF FPC}{$MODE DELPHI}{$ENDIF}
{$APPTYPE CONSOLE}

uses
  {$IFDEF UNIX}cthreads,{$ENDIF}
  SysUtils,
  RALClient, RALResponse,
  RALIndyClient; // o motor do cliente: precisa estar no uses

var
  Cliente: TRALClient;
  Resposta: TRALResponse;
begin
  Cliente := TRALClient.Create(nil);
  try
    Cliente.EngineType := 'Indy';                  // o mesmo nome do motor
    Cliente.BaseURL.Text := 'http://localhost:8000';
    Cliente.Get('/ping', Resposta);                // pergunta e espera
    try
      WriteLn('Status: ', Resposta.StatusCode);    // 200
      WriteLn('Texto: ', Resposta.ResponseText);   // pong
    finally
      Resposta.Free;                               // a resposta é sua: libere
    end;
  finally
    Cliente.Free;
  end;
  ReadLn;
end.

5. Trocar de motor

Troque as duas linhas marcadas "o motor" (e, no Lazarus, o requisito do projeto).

Motor Servidor (uses / classe) Cliente (uses / EngineType)
Indy RALIndyServer / TRALIndyServer RALIndyClient / 'Indy'
mORMot2 RALSynopseServer / TRALSynopseServer RALSynopseClient / 'mORMot2'
fpHTTP (só Lazarus) RALfpHTTPServer / TRALfpHttpServer RALfpHTTPClient / 'fpHTTP'
Sagui RALSaguiServer / TRALSaguiServer —
NetHTTP (só Delphi) — RALnetHTTPClient / 'netHTTP'

Qual escolher: Qual motor escolher?.

Com componentes, sem escrever o Create

Num projeto com formulário, arraste da paleta RAL - Server um servidor (ex.: TRALIndyServer), dê dois cliques em Routes no Object Inspector, adicione uma rota, preencha Route com ping e dê dois cliques no evento OnReply.

Ou deixe o assistente montar o projeto (pacote RALWizard / ralwizardpack; na 2.0 🚧, RALWizardDsgn / ralwizarddsgn):

  • Delphi: File > New > Other... > Pascal RAL > Pascal RAL - Server Wizard
  • Lazarus: Project > New Project... > Pascal RAL Application Wizard

Ele cria um servidor com janela, console ou CGI, já com a rota ping.

Erros comuns

O que aparece Causa O que fazer
File not found: 'RALServer.dcu' / Can't find unit RALServer o RAL não está no library path / no projeto Instalação; no Lazarus, o requisito pascalral
Could not bind socket / Address already in use outro programa já usa a porta 8000 troque Port para 8001, ou feche o outro programa
o navegador diz "não foi possível conectar" o servidor não está rodando, ou a porta é outra confira a janela preta e o número da porta
404 o endereço não bate com a rota a rota é ping; o endereço, /ping
cliente: Engine Indy not found: the unit that registers it is not in the uses a unit do motor não está no uses acrescente RALIndyClient (ou a do seu motor)

Mais casos: Problemas comuns.

Próximos passos

Clone this wiki locally