i have written this UDPserver and client
Client
Kod: Tümünü seç
unit udpfrm;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, IdBaseComponent, IdComponent, IdUDPBase,
IdUDPClient, Vcl.StdCtrls, Vcl.ExtCtrls, IdUDPServer, IdGlobal, IdSocketHandle;
type
TUDPClient = class(TForm)
Button1: TButton;
tmr1: TTimer;
Memo1: TMemo;
udpreciver: TIdUDPServer;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure tmr1Timer(Sender: TObject);
procedure udpreciverStatus(ASender: TObject; const AStatus: TIdStatus;
const AStatusText: string);
procedure udpreciverUDPRead(AThread: TIdUDPListenerThread;
const AData: TIdBytes; ABinding: TIdSocketHandle);
private
{ Private declarations }
public
{ Public declarations }
end;
var
UDPClient: TUDPClient;
implementation
{$R *.dfm}
procedure TUDPClient.Button1Click(Sender: TObject);
var
Binding: TIdSocketHandle;
begin
if not udpreciver.Active then
begin
udpreciver.Active := True;
udpreciver.Send('127.0.0.1',6754,edit1.Text);
tmr1.Enabled := True;
end;
end;
procedure TUDPClient.tmr1Timer(Sender: TObject);
begin
try if udpreciver.Active then
udpreciver.Send('127.0.0.1',6754,edit1.Text);
except end;
end;
procedure TUDPClient.udpreciverStatus(ASender: TObject;
const AStatus: TIdStatus; const AStatusText: string);
begin
memo1.Lines.Add(AStatusText);
end;
procedure TUDPClient.udpreciverUDPRead(AThread: TIdUDPListenerThread;
const AData: TIdBytes; ABinding: TIdSocketHandle);
begin
memo1.Lines.Add(bytestostring(AData) + Abinding.IP);
end;
end.
Kod: Tümünü seç
unit UDPSRV;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, IdBaseComponent, IdComponent, IdUDPBase,
IdUDPServer, IdGlobal, IdSocketHandle, Vcl.StdCtrls;
type
Tudpservfrm = class(TForm)
udpserver: TIdUDPServer;
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Memo1: TMemo;
procedure udpserverUDPRead(AThread: TIdUDPListenerThread;
const AData: TIdBytes; ABinding: TIdSocketHandle);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure UpdateBindings;
public
{ Public declarations }
end;
var
udpservfrm: Tudpservfrm;
implementation
{$R *.dfm}
procedure Tudpservfrm.Button1Click(Sender: TObject);
begin
UpdateBindings;
udpserver.Active := true;
end;
procedure Tudpservfrm.udpserverUDPRead(AThread: TIdUDPListenerThread;
const AData: TIdBytes; ABinding: TIdSocketHandle);
begin
//
//memo1.Lines.Add(bytestostring(AData) + ABinding.PeerIP + ' : ' + intTostr(ABinding.PeerPort));
Athread.Server.Send(ABinding.PeerIP, ABinding.PeerPort, bytestostring(AData));
end;
procedure Tudpservfrm.UpdateBindings;
var
Binding: TIdSocketHandle;
begin
udpserver.DefaultPort := StrToInt(Edit1.Text);
udpserver.Bindings.Clear;
Binding := udpserver.Bindings.Add;
Binding.IP := '0.0.0.0';
Binding.Port := StrToInt(Edit1.Text);
end;
end.
i communicate with the server and send and recive data for 1 client only. i wanted to know how to send/orsend buffer to all connected clients ?