server.dprprogram server;{$APPTYPE CONSOLE}uses
  SysUtils, IdSocketHandle, IdBaseComponent, IdComponent, IdUDPBase, IdUDPServer, IdGlobal;type
  TServer = class
  private
    FUdpServer: TIdUDPServer;
    procedure OnRead(AThread: TIdUDPListenerThread; AData: TIdBytes; ABinding: TIdSocketHandle);
  public
    constructor Create(const port: Word);
    destructor Destroy; override;
  end;
{ TServer }constructor TServer.Create(const port: Word);
begin
  FUdpServer := TIdUDPServer.Create;
  with FUdpServer do
  begin
    ThreadedEvent := True;
    DefaultPort := port;
    OnUDPRead := OnRead;
    Active := True;
  end;
end;destructor TServer.Destroy;
begin
  FUdpServer.Free;
end;procedure TServer.OnRead(AThread: TIdUDPListenerThread; AData: TIdBytes; ABinding: TIdSocketHandle);
var
  content: string;
begin
  SetLength(content, Length(AData));
  Move(AData[0], content[1], Length(AData));
  Writeln(Format('[%s] %s', [ABinding.PeerIP, content]));
end;var
  ser: TServer;begin
  ser := TServer.Create(9999);
  try
    Readln;
  finally
    ser.Free;
  end;
end.client.dpr
program client;{$APPTYPE CONSOLE}uses
  IdBaseComponent, IdComponent, IdUDPBase, IdUDPClient;var
cli: TIdUDPClient;
  
begin
  cli := TIdUDPClient.Create;
  try
//默认测试为127.0.0.1:9999,自己修改外网IP及端口,记得端口(UDP)要开放
    cli.Send('127.0.0.1', 9999, 'hello indy!');
  finally
    cli.Free;
  end;
end.