1,593
社区成员
发帖
与我相关
我的任务
分享
unit UnitClient;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
Vcl.StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient;
type
TMyThread = class(TThread)
protected
procedure Execute; override;
public
constructor Create; overload;
destructor Destroy; override;
end;
TFormClient = class(TForm)
Edit1: TEdit;
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
public
{ Public declarations }
end;
var
FormClient: TFormClient;
Thread: TThread;
IsThreadTerminated: Boolean;
implementation
{$R *.dfm}
procedure TFormClient.FormShow(Sender: TObject);
begin
Thread := TMyThread.Create;
IsThreadTerminated := False;
end;
procedure TFormClient.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if not IsThreadTerminated then
begin
Thread.Terminate;
IsThreadTerminated := True;
end;
if Thread <> nil then
begin
Sleep(100);
Action := caNone;
PostMessage(Self.Handle, WM_CLOSE, 0, 0);
end;
end;
constructor TMyThread.Create;
begin
inherited;
FreeOnTerminate := True;
end;
destructor TMyThread.Destroy;
begin
inherited;
Thread := nil;
end;
procedure TMyThread.Execute;
var
Str: String;
IdTCPClient: TIdTCPClient;
begin
IdTCPClient := TIdTCPClient.Create(nil);
IdTCPClient.Host := '192.168.2.200';
IdTCPClient.Port := 10000;
IdTCPClient.Connect;
while not Terminated do
begin
IdTCPClient.IOHandler.CheckForDataOnSource(10);
while not IdTCPClient.IOHandler.InputBufferIsEmpty do
begin
Str := IdTCPClient.IOHandler.ReadLn;
Synchronize(procedure begin FormClient.Edit1.Text := Str; end);
end;
end;
IdTCPClient.Free;
end;
end.
unit UnitClient;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
Vcl.StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient;
type
TMyThread = class(TThread)
protected
procedure Execute; override;
end;
TFormClient = class(TForm)
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
Thread: TThread;
public
{ Public declarations }
end;
var
FormClient: TFormClient;
implementation
{$R *.dfm}
procedure TFormClient.FormCreate(Sender: TObject);
begin
Thread := TMyThread.Create(True);
Thread.FreeOnTerminate := True;
Thread.Start;
end;
procedure TFormClient.FormDestroy(Sender: TObject);
begin
Thread.Terminate;
end;
procedure TMyThread.Execute;
var
Str: String;
IdTCPClient: TIdTCPClient;
begin
IdTCPClient := TIdTCPClient.Create(nil);
IdTCPClient.Host := '192.168.10.22';
IdTCPClient.Port := 10000; //假定你的服务器端口是10000
IdTCPClient.Connect;
while not Terminated do
begin
IdTCPClient.IOHandler.CheckForDataOnSource(10);
while not IdTCPClient.IOHandler.InputBufferIsEmpty do
begin
Str := IdTCPClient.IOHandler.ReadLn;
Synchronize(procedure begin FormClient.Edit1.Text := Str; end);
end;
end;
IdTCPClient.Free;
end;
end.