📄 clientfrmmainunit.pas
字号:
unit ClientFrmMainUnit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, StdCtrls, ExtCtrls,jpeg;
type
TClientFrmMain = class(TForm)
CBClientActive: TCheckBox;
IncomingMessages: TMemo;
Label1: TLabel;
Client: TIdTCPClient;
Label3: TLabel;
EditMessage: TEdit;
ButtonSend: TButton;
Image: TImage;
procedure CBClientActiveClick(Sender: TObject);
procedure ButtonSendClick(Sender: TObject);
procedure FormShow(Sender: TObject);
private
public
tcp_package_size:integer;//保存服务器所能接受的包大小
end;
TClientHandleThread = class(TThread)
private
protected
procedure Execute; override;
end;
var
ClientFrmMain: TClientFrmMain;
ClientHandleThread: TClientHandleThread;
Mem:TmemoryStream;
JPEGSize:Integer;
implementation
{$R *.DFM}
Function GetJPEGSize(message:string):integer;
var
substr_begin:integer;
substr_end:integer;
size:string;
begin
substr_begin:=pos('[',message);
substr_end:=pos(']',message);
size:=copy(message,substr_begin+1,substr_end-substr_begin-1);
result:=StrToInt(size);
end;
procedure TClientHandleThread.Execute;
var
InputBufferSize:Integer;
str:string;
Jpg:TJpegImage;
begin
Mem:=TmemoryStream.Create;
Mem.Position:=0;
while not Terminated do
begin
if not ClientFrmMain.Client.Connected then
Terminate
else
try
ClientFrmMain.Client.readfromstack(false,1,false);
InputBufferSize:= ClientFrmMain.Client.InputBuffer.Size;
//-----------------------首先定义TCP数据包的大小------------------------//
if (ClientFrmMain.tcp_package_size=0) and (InputBufferSize >0 ) then begin
str:=ClientFrmMain.Client.ReadString(InputBufferSize);
ClientFrmMain.tcp_package_size:=GetJPEGSize(str);
end
//------------------------接收过程中------------------------------------//
else if (InputBufferSize=ClientFrmMain.tcp_package_size) and (InputBufferSize>0) then begin
ClientFrmMain.Client.ReadStream(mem,ClientFrmMain.tcp_package_size);
end
//------------------------接收到最后一个数据,并且画出来-----------------//
else if (InputBufferSize>0) and (InputBufferSize<ClientFrmMain.tcp_package_size) then begin
ClientFrmMain.Client.ReadStream(mem,InputBufferSize);
MEM.Position:=0;
jpg:=TJpegImage.Create;
try
JPG.LoadFromStream(mem);
MEM.Clear;
ClientFrmMain.Image.Picture.Assign(JPG);
except
end;
jpg.Free;
MEM.Clear;
end;
ClientFrmMain.Client.InputBuffer.Clear;
except
end;
end;
end;
procedure TClientFrmMain.CBClientActiveClick(Sender: TObject);
begin
if CBClientActive.Checked then
begin
try
Client.Connect(10000);
ClientHandleThread := TClientHandleThread.Create(True);
ClientHandleThread.FreeOnTerminate:=True;
ClientHandleThread.Resume;
except
on E: Exception do MessageDlg ('Error while connecting:'+#13+E.Message, mtError, [mbOk], 0);
end;
end
else
begin
ClientHandleThread.Terminate;
Client.Disconnect;
end;
ButtonSend.Enabled := Client.Connected;
CBClientActive.Checked := Client.Connected;
end;
procedure TClientFrmMain.ButtonSendClick(Sender: TObject);
begin
// Client.Write(EditMessage.Text);
end;
procedure TClientFrmMain.FormShow(Sender: TObject);
begin
tcp_package_size:=0;//初始化包的大小为0;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -