Hello!
I want to write a program that can 'synchronize' some data.
Here I tried to synchronize two TextEdit.Text but it not works.
(That's my first try with UDP)
Anybody knows what's the problem?
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls,
laz_synapse, blcksock;
type
{ TForm1 }
TForm1 = class(TForm)
ConnectButton: TButton;
HostButton: TButton;
IPEdit: TEdit;
PortEdit: TEdit;
TextEdit: TEdit;
Log: TMemo;
procedure ConnectButtonClick(Sender: TObject);
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
procedure HostButtonClick(Sender: TObject);
private
public
end;
type
TCustomThread = class(TThread)
Listener: TUDPBlockSocket;
Connection: TUDPBlockSocket;
Connected: boolean;
Received: string;
ForSend: string;
protected
procedure Execute; override;
public
constructor Create(CreateSuspended: boolean);
procedure DataIn;
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
var
SynCronThread: TCustomThread;
mode: string;
constructor TCustomThread.Create(CreateSuspended: boolean);
begin
inherited
Create(CreateSuspended);
FreeOnTerminate := True;
end;
procedure TCustomThread.DataIn;
begin
Form1.Log.Append(Received);
end;
procedure TCustomThread.Execute;
begin
if mode = 'Server' then
begin
Listener := TUDPBlockSocket.Create;
Listener.CreateSocket;
Listener.Bind(Form1.IPEdit.Text, Form1.PortEdit.Text);
repeat
Received := Listener.RecvString(10);
if Received <> '' then
ShowMessage(Received);
Synchronize(@DataIn);
until Terminated;
if Terminated then
begin
Listener.CloseSocket;
Listener.Free;
end;
end;
if mode = 'Client' then
begin
repeat
Connection := TUDPBlockSocket.Create;
Connection.CreateSocket;
Connection.Connect(Form1.IPEdit.Text, Form1.PortEdit.Text);
ForSend := Form1.TextEdit.Text;
Connection.SendString(ForSend);
Connection.CloseSocket;
Connection.Free;
until Terminated;
end;
end;
procedure TForm1.HostButtonClick(Sender: TObject);
begin
SynCronThread := TCustomThread.Create(True);
mode := 'Server';
SynCronThread.Start;
end;
procedure TForm1.ConnectButtonClick(Sender: TObject);
begin
SynCronThread := TCustomThread.Create(True);
mode := 'Client';
SynCronThread.Start;
end;
procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
SynCronThread.Terminate;
end;
end.