procedure TFormMain.IdTCPServerExecute(AThread: TIdPeerThread);
var
sCommand: string;
begin
with AThread.Connection do
begin
sCommand := ReadLn();
FLogEntry := sCommand + ' 来自于主机 '+AThread.Connection.Socket.Binding.PeerIP;
AThread.Synchronize(AddLogEntry);
if AnsiStartsText('DATA ', sCommand) then
begin
FReceived := RightStr(sCommand, Length(sCommand)-5);
WriteLn('200: 数据接收成功!');
AThread.Synchronize(DisplayData);
end
else
if SameText(sCommand, 'QUIT') then
begin
FLogEntry := '断开同主机 '+ AThread.Connection.Socket.Binding.PeerIP+ ' 的连接!';
AThread.Synchronize(AddLogEntry);
Disconnect;
end
else
begin
WriteLn('500: 无法识别的命令!');
FLogEntry := '无法识别命令:' + sCommand;
AThread.Synchronize(AddLogEntry);
end;//endifend;end;
FLogEntry 和AddLogEntry是怎么回事,看不明白,请大虾指教,
关于DELPHi 中 “FLogEntry”的问题? 请看如下代码 :
答案:2 悬赏:50 手机版
解决时间 2021-03-16 23:11
- 提问者网友:嗝是迷路的屁
- 2021-03-16 11:59
最佳答案
- 五星知识达人网友:廢物販賣機
- 2021-03-16 13:25
FLogEntry是自定义的字符串,就是string类型变量。AddLogEntry是自定义的一个过程,用来作一个登陆记录。在对象AThread的Synchronize方法中被调用。Synchronize方法是为了避免多个子线程同时访问主线程资源。源代码如下,FLogEntry 和AddLogEntry是在Form1类中声明的。
源代码:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, IdAntiFreezeBase, IdAntiFreeze, IdTCPServer,
IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,StrUtils,jpeg;
type
TForm1 = class(TForm)
IdTCPClient: TIdTCPClient;
IdTCPServer: TIdTCPServer;
IdAntiFreeze1: TIdAntiFreeze;
Panel1: TPanel;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Memo1: TMemo;
Panel2: TPanel;
Button5: TButton;
Button6: TButton;
Memo2: TMemo;
EdtData: TEdit;
Edit1: TEdit;
Button7: TButton;
Image1: TImage;
Button8: TButton;
Image2: TImage;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure IdTCPServerConnect(AThread: TIdPeerThread);
procedure IdTCPServerExecute(AThread: TIdPeerThread);
procedure Button7Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
FLogEntry : string;
FReceived : string;
leaveSize : Longint;
procedure DisplayData();
procedure AddLogEntry();
procedure getstring(AThread: TIdPeerThread);
procedure getArray(AThread: TIdPeerThread);
procedure getStream(AThread: TIdPeerThread);
procedure getBuff(AThread: TIdPeerThread);
public
{ Public declarations }
end;
const BufSize = 2048;
var
Form1: TForm1;
pubmsstream : TMemoryStream;
sendmsstream : TMemoryStream;
implementation
{$R *.dfm}
procedure TForm1.AddLogEntry;
begin
Memo2.Lines.Add(FLogEntry);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.Add('正在连接 ...');
with IdTCPClient do
begin
try
Connect(5000);
try
Memo1.Lines.Add(ReadLn());
except
Memo1.Lines.Add('远程主机无响应!');
IdTCPClient.Disconnect();
end;//end try
except
Memo1.Lines.Add('无法建立连接!');
end;//end try
end;//end with
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Memo1.Lines.Add('DATA ' + EdtData.Text);
with IdTCPClient do
begin
try
//SendCmd('DATA ' + EdtData.Text,1);
WriteLn('DATA ' + EdtData.Text);
Memo1.Lines.Add(ReadLn())
except
Memo1.Lines.Add('发送数据失败!');
IdTCPClient.Disconnect();
Memo1.Lines.Add('同主机 连接已断开!');
end;//end try
end;//end with
end;
procedure TForm1.Button3Click(Sender: TObject);
var
Received: string;
begin
Memo1.Lines.Add('QUIT');
try
IdTCPClient.WriteLn('QUIT');
finally
IdTCPClient.Disconnect();
Memo1.Lines.Add('同主机 连接已断开!');
end;//end try
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
IdTCPClient.Disconnect();
Close;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
IdTCPServer.DefaultPort := 1025;
IdTCPServer.Active := True;
Memo2.Lines.Add('服务器已成功启动!');
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
IdTCPServer.Active := False;
Memo2.Lines.Add('服务器已成功停止!');
end;
procedure TForm1.DisplayData;
begin
Edit1.Text := FReceived;
end;
procedure TForm1.IdTCPServerConnect(AThread: TIdPeerThread);
begin
Memo2.Lines.Add('来自主机 '+ AThread.Connection.Socket.Binding.PeerIP+ ' 的连接请求已被接纳!');
AThread.Connection.WriteLn('100: 欢迎连接到简单TCP服务器!');
end;
procedure TForm1.IdTCPServerExecute(AThread: TIdPeerThread);
begin
//getstring(AThread);
//getArray(AThread);
//getStream(AThread);
getBuff(AThread);
end;
procedure TForm1.Button7Click(Sender: TObject);
var
Arr : array of string;
mstream : TMemoryStream;
jpegname : TJPEGImage;
sendsize : Longint;
buf : array [0..BufSize-1] of Char;
jpegs:TJpegImage;
i : integer;
begin
mstream := TMemoryStream.Create;
jpegs:=TJpegImage.Create;
jpegname:=TJpegImage.Create;
//请自已选择本地图片
jpegname.LoadFromFile('c:\top.jpg');
jpegname.SaveToStream(mstream);
mstream.Position := 0;
jpegs.LoadFromStream(mstream);
Image1.Picture.Assign(jpegs);
sendsize := mstream.Size;
mstream.SaveToFile('c:\aa.jpg');
//mstream.ReadBuffer(buf,sendsize);
IdTCPClient.WriteLn('aa');
IdTCPClient.WriteInteger(sendsize);
IdTCPClient.WriteStream(mstream);
{
SetLength(Arr,5);
Arr[0] := 1;
Arr[1] := 2;
Arr[2] := 3;
Arr[3] := 4;
Arr[4] := 5;
IdTCPClient.WriteLn('ARR');
IdTCPClient.WriteCardinal(Length(Arr));
IdTCPClient.WriteBuffer(Arr, Length(Arr) * sizeof(Byte));
}
end;
procedure TForm1.getstring(AThread: TIdPeerThread);
var
sCommand: string;
begin
with AThread.Connection do
begin
sCommand := ReadLn();
FLogEntry := sCommand + ' 来自于主机 '+ AThread.Connection.Socket.Binding.PeerIP;
AThread.Synchronize(AddLogEntry);
if AnsiStartsText('DATA ', sCommand) then
begin
FReceived := RightStr(sCommand, Length(sCommand)-5);
WriteLn('200: 数据接收成功!');
AThread.Synchronize(DisplayData);
end
else if SameText(sCommand, 'QUIT') then
begin
FLogEntry := '断开同主机 ' + AThread.Connection.Socket.Binding.PeerIP+ ' 的连接!';
AThread.Synchronize(AddLogEntry);
Disconnect;
end
else begin
WriteLn('500: 无法识别的命令!');
FLogEntry := '无法识别命令:' + sCommand;
AThread.Synchronize(AddLogEntry);
end;//endif
end;
end;
procedure TForm1.getArray(AThread: TIdPeerThread);
var
Arr: array of byte;
Command : String;
Len: Cardinal;
begin
with AThread.Connection do
begin
Command := ReadLn();
if Command = 'ARR' then
begin
Len := AThread.Connection.ReadCardinal();
if Len > 0 then
begin
SetLength(Arr, Len);
AThread.Connection.ReadBuffer(Arr, sizeof(Byte) * Len);
edit1.Text := inttostr(Arr[0]);
end;
end;
end
end;
procedure TForm1.getStream(AThread: TIdPeerThread);
var
msstream : TMemoryStream;
comm : string;
sizepic : integer;
begin
msstream := TMemoryStream.Create;
with AThread.Connection do
begin
comm := ReadLn();
if (comm = 'aa') then
begin
sizepic := ReadInteger();
ReadStream(msstream,sizepic);
end;
end;
msstream.SaveToFile('c:\bb.jpg');
end;
procedure TForm1.Button8Click(Sender: TObject);
var
sendsize : Longint;
sendbuf : array [0..BufSize-1] of Char;
begin
if (leaveSize > 0) then
begin
if leaveSize > BufSize then
begin
sendsize := BufSize;
end
else
begin
sendsize := leaveSize;
end;
try
sendmsstream.ReadBuffer(sendbuf,sendsize);
except
sendmsstream.Free;
end;
IdTCPClient.WriteInteger(sendsize);
IdTCPClient.WriteBuffer(sendbuf,sendsize);
end;
end;
procedure TForm1.getBuff(AThread: TIdPeerThread);
var
comm : string;
sizepic : integer;
Getbuf : array [0..BufSize-1] of Char;
jpegs:TJpegImage;
begin
with AThread.Connection do
begin
sizepic := ReadInteger();
if sizepic >0 then
begin
ReadBuffer(Getbuf,sizepic);
pubmsstream.Write(Getbuf,sizepic);
leaveSize := leaveSize - sizepic;
end;
end;
if (leaveSize <= 0) then
begin
pubmsstream.Position := 0;
pubmsstream.SaveToFile('c:\cc.jpg');
jpegs := TJPEGImage.Create;
jpegs.LoadFromStream(pubmsstream);
Image2.Picture.Assign(jpegs);
pubmsstream.Free;
end
else
begin
Button8Click(owner);
end;
// msstream.SaveToFile('c:\bb.jpg');
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
pubmsstream := TMemoryStream.Create;
end;
procedure TForm1.FormShow(Sender: TObject);
var
jpegname : TJPEGImage;
jpegs:TJpegImage;
begin
sendmsstream := TMemoryStream.Create;
jpegs:=TJpegImage.Create;
jpegname:=TJpegImage.Create;
jpegname.LoadFromFile('c:\top.jpg');
jpegname.SaveToStream(sendmsstream);
{
jpegs.LoadFromStream(sendmsstream);
Image1.Picture.Assign(jpegs);
}
if leaveSize <= 0 then
leaveSize := sendmsstream.Size;
sendmsstream.Position := 0;
end;
end.
源代码:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, IdAntiFreezeBase, IdAntiFreeze, IdTCPServer,
IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,StrUtils,jpeg;
type
TForm1 = class(TForm)
IdTCPClient: TIdTCPClient;
IdTCPServer: TIdTCPServer;
IdAntiFreeze1: TIdAntiFreeze;
Panel1: TPanel;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Memo1: TMemo;
Panel2: TPanel;
Button5: TButton;
Button6: TButton;
Memo2: TMemo;
EdtData: TEdit;
Edit1: TEdit;
Button7: TButton;
Image1: TImage;
Button8: TButton;
Image2: TImage;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure IdTCPServerConnect(AThread: TIdPeerThread);
procedure IdTCPServerExecute(AThread: TIdPeerThread);
procedure Button7Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
FLogEntry : string;
FReceived : string;
leaveSize : Longint;
procedure DisplayData();
procedure AddLogEntry();
procedure getstring(AThread: TIdPeerThread);
procedure getArray(AThread: TIdPeerThread);
procedure getStream(AThread: TIdPeerThread);
procedure getBuff(AThread: TIdPeerThread);
public
{ Public declarations }
end;
const BufSize = 2048;
var
Form1: TForm1;
pubmsstream : TMemoryStream;
sendmsstream : TMemoryStream;
implementation
{$R *.dfm}
procedure TForm1.AddLogEntry;
begin
Memo2.Lines.Add(FLogEntry);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.Add('正在连接 ...');
with IdTCPClient do
begin
try
Connect(5000);
try
Memo1.Lines.Add(ReadLn());
except
Memo1.Lines.Add('远程主机无响应!');
IdTCPClient.Disconnect();
end;//end try
except
Memo1.Lines.Add('无法建立连接!');
end;//end try
end;//end with
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Memo1.Lines.Add('DATA ' + EdtData.Text);
with IdTCPClient do
begin
try
//SendCmd('DATA ' + EdtData.Text,1);
WriteLn('DATA ' + EdtData.Text);
Memo1.Lines.Add(ReadLn())
except
Memo1.Lines.Add('发送数据失败!');
IdTCPClient.Disconnect();
Memo1.Lines.Add('同主机 连接已断开!');
end;//end try
end;//end with
end;
procedure TForm1.Button3Click(Sender: TObject);
var
Received: string;
begin
Memo1.Lines.Add('QUIT');
try
IdTCPClient.WriteLn('QUIT');
finally
IdTCPClient.Disconnect();
Memo1.Lines.Add('同主机 连接已断开!');
end;//end try
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
IdTCPClient.Disconnect();
Close;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
IdTCPServer.DefaultPort := 1025;
IdTCPServer.Active := True;
Memo2.Lines.Add('服务器已成功启动!');
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
IdTCPServer.Active := False;
Memo2.Lines.Add('服务器已成功停止!');
end;
procedure TForm1.DisplayData;
begin
Edit1.Text := FReceived;
end;
procedure TForm1.IdTCPServerConnect(AThread: TIdPeerThread);
begin
Memo2.Lines.Add('来自主机 '+ AThread.Connection.Socket.Binding.PeerIP+ ' 的连接请求已被接纳!');
AThread.Connection.WriteLn('100: 欢迎连接到简单TCP服务器!');
end;
procedure TForm1.IdTCPServerExecute(AThread: TIdPeerThread);
begin
//getstring(AThread);
//getArray(AThread);
//getStream(AThread);
getBuff(AThread);
end;
procedure TForm1.Button7Click(Sender: TObject);
var
Arr : array of string;
mstream : TMemoryStream;
jpegname : TJPEGImage;
sendsize : Longint;
buf : array [0..BufSize-1] of Char;
jpegs:TJpegImage;
i : integer;
begin
mstream := TMemoryStream.Create;
jpegs:=TJpegImage.Create;
jpegname:=TJpegImage.Create;
//请自已选择本地图片
jpegname.LoadFromFile('c:\top.jpg');
jpegname.SaveToStream(mstream);
mstream.Position := 0;
jpegs.LoadFromStream(mstream);
Image1.Picture.Assign(jpegs);
sendsize := mstream.Size;
mstream.SaveToFile('c:\aa.jpg');
//mstream.ReadBuffer(buf,sendsize);
IdTCPClient.WriteLn('aa');
IdTCPClient.WriteInteger(sendsize);
IdTCPClient.WriteStream(mstream);
{
SetLength(Arr,5);
Arr[0] := 1;
Arr[1] := 2;
Arr[2] := 3;
Arr[3] := 4;
Arr[4] := 5;
IdTCPClient.WriteLn('ARR');
IdTCPClient.WriteCardinal(Length(Arr));
IdTCPClient.WriteBuffer(Arr, Length(Arr) * sizeof(Byte));
}
end;
procedure TForm1.getstring(AThread: TIdPeerThread);
var
sCommand: string;
begin
with AThread.Connection do
begin
sCommand := ReadLn();
FLogEntry := sCommand + ' 来自于主机 '+ AThread.Connection.Socket.Binding.PeerIP;
AThread.Synchronize(AddLogEntry);
if AnsiStartsText('DATA ', sCommand) then
begin
FReceived := RightStr(sCommand, Length(sCommand)-5);
WriteLn('200: 数据接收成功!');
AThread.Synchronize(DisplayData);
end
else if SameText(sCommand, 'QUIT') then
begin
FLogEntry := '断开同主机 ' + AThread.Connection.Socket.Binding.PeerIP+ ' 的连接!';
AThread.Synchronize(AddLogEntry);
Disconnect;
end
else begin
WriteLn('500: 无法识别的命令!');
FLogEntry := '无法识别命令:' + sCommand;
AThread.Synchronize(AddLogEntry);
end;//endif
end;
end;
procedure TForm1.getArray(AThread: TIdPeerThread);
var
Arr: array of byte;
Command : String;
Len: Cardinal;
begin
with AThread.Connection do
begin
Command := ReadLn();
if Command = 'ARR' then
begin
Len := AThread.Connection.ReadCardinal();
if Len > 0 then
begin
SetLength(Arr, Len);
AThread.Connection.ReadBuffer(Arr, sizeof(Byte) * Len);
edit1.Text := inttostr(Arr[0]);
end;
end;
end
end;
procedure TForm1.getStream(AThread: TIdPeerThread);
var
msstream : TMemoryStream;
comm : string;
sizepic : integer;
begin
msstream := TMemoryStream.Create;
with AThread.Connection do
begin
comm := ReadLn();
if (comm = 'aa') then
begin
sizepic := ReadInteger();
ReadStream(msstream,sizepic);
end;
end;
msstream.SaveToFile('c:\bb.jpg');
end;
procedure TForm1.Button8Click(Sender: TObject);
var
sendsize : Longint;
sendbuf : array [0..BufSize-1] of Char;
begin
if (leaveSize > 0) then
begin
if leaveSize > BufSize then
begin
sendsize := BufSize;
end
else
begin
sendsize := leaveSize;
end;
try
sendmsstream.ReadBuffer(sendbuf,sendsize);
except
sendmsstream.Free;
end;
IdTCPClient.WriteInteger(sendsize);
IdTCPClient.WriteBuffer(sendbuf,sendsize);
end;
end;
procedure TForm1.getBuff(AThread: TIdPeerThread);
var
comm : string;
sizepic : integer;
Getbuf : array [0..BufSize-1] of Char;
jpegs:TJpegImage;
begin
with AThread.Connection do
begin
sizepic := ReadInteger();
if sizepic >0 then
begin
ReadBuffer(Getbuf,sizepic);
pubmsstream.Write(Getbuf,sizepic);
leaveSize := leaveSize - sizepic;
end;
end;
if (leaveSize <= 0) then
begin
pubmsstream.Position := 0;
pubmsstream.SaveToFile('c:\cc.jpg');
jpegs := TJPEGImage.Create;
jpegs.LoadFromStream(pubmsstream);
Image2.Picture.Assign(jpegs);
pubmsstream.Free;
end
else
begin
Button8Click(owner);
end;
// msstream.SaveToFile('c:\bb.jpg');
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
pubmsstream := TMemoryStream.Create;
end;
procedure TForm1.FormShow(Sender: TObject);
var
jpegname : TJPEGImage;
jpegs:TJpegImage;
begin
sendmsstream := TMemoryStream.Create;
jpegs:=TJpegImage.Create;
jpegname:=TJpegImage.Create;
jpegname.LoadFromFile('c:\top.jpg');
jpegname.SaveToStream(sendmsstream);
{
jpegs.LoadFromStream(sendmsstream);
Image1.Picture.Assign(jpegs);
}
if leaveSize <= 0 then
leaveSize := sendmsstream.Size;
sendmsstream.Position := 0;
end;
end.
全部回答
- 1楼网友:夜风逐马
- 2021-03-16 13:41
这个效果用delphi实现比较麻烦。因为可能需要有sdk开发的经验。
因为图中效果使用到了迅雷的bolt界面引擎。该引擎提供了sdk下载,该引擎的地址为: bolt.xunlei.com。你有兴趣的话可以去看一看。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯