Пример работы с компонентами Indy UDP (server, client) на Delphi

Довольно хорош протокол UDP для передачи текстовых сообщений, то есть можно организовывать локальные чаты и тому подобные вещи. Я решил привести пример самой простой работы с UDP на Delphi.


Дата: 29.05.2009 г.

Рейтинг: 0

Метки:

Пошаговая инструкция:

Пример привести-то привел, но Вы уж простите, я не стал расписывать каждую строку, т.к. я не вижу ничего сложно и каждый желающий может в этом разобраться.

Собственно если что-то непонятно можно задать мне вопрос. А вот собственно и код:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdUDPServer, IdBaseComponent, IdComponent, IdUDPBase,
  IdUDPClient, IdSocketHandle;

type
  TForm1 = class(TForm)
    IdUDPClient1: TIdUDPClient;
    IdUDPServer1: TIdUDPServer;
    Button1: TButton;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button1Click(Sender: TObject);
    procedure IdUDPServer1UDPRead(AThread: TIdUDPListenerThread; AData: TBytes;
      ABinding: TIdSocketHandle);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
[b]//Процедура отправки сообщения[/b]
procedure TForm1.Button1Click(Sender: TObject);
begin
  try
    IdUDPClient1.Active := True;
    IdUDPClient1.Host := 'localhost';
    IdUDPClient1.Connect;
    if IdUDPClient1.Connected  then
      begin
        IdUDPClient1.Send(TimeToStr(Time));
        Label1.Caption := 'ok';
      end;
    IdUDPClient1.Active := False;
    Beep;Beep;Beep;
  except
    MessageDlg('Что-то не получилось =(', mtError, [mbOk], 0);
  end;
end;
[b]
//Вкл./Выкл. сервера UDP при запуске и закрытии формы[/b]
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  IdUDPServer1.Active := False;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  IdUDPServer1.Active := True;
end;

[b]//Процедура реакции сервера при получении данных[/b]
procedure TForm1.IdUDPServer1UDPRead(AThread: TIdUDPListenerThread;
  AData: TBytes; ABinding: TIdSocketHandle);
Var
  i:Integer;
  s:String;
begin
  s := '';
  try
    i := 0;
    while (AData[i] <> 0) do
      begin
      s := s + chr(AData[i]);
      i := i + 1;
      end;
  finally
    Label1.Caption := s;
  end;
end;

end.



Похожие статьи: