📄 userver.pas
字号:
unit UServer;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdTCPServer, StdCtrls, ComCtrls,
DB, DBClient, Grids, DBGrids;
type
TForm2 = class(TForm)
server: TIdTCPServer;
st: TStatusBar;
log: TMemo;
recv: TMemo;
Label1: TLabel;
ClientDataSet1: TClientDataSet;
DBGrid1: TDBGrid;
DataSource1: TDataSource;
procedure serverAfterCommandHandler(ASender: TIdTCPServer;
AThread: TIdPeerThread);
procedure serverBeforeCommandHandler(ASender: TIdTCPServer;
const AData: String; AThread: TIdPeerThread);
procedure serverConnect(AThread: TIdPeerThread);
procedure serverDisconnect(AThread: TIdPeerThread);
procedure serverStatus(ASender: TObject; const AStatus: TIdStatus;
const AStatusText: String);
procedure serverExecute(AThread: TIdPeerThread);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure writeLog(sMSG:STRING);
end;
var
Form2: TForm2;
implementation
uses udm;
{$R *.dfm}
procedure TForm2.serverAfterCommandHandler(ASender: TIdTCPServer;
AThread: TIdPeerThread);
begin
writelog('aftercommand'+athread.Connection.LocalName+inttostr(asender.defaultport));
end;
procedure TForm2.writeLog(sMSG: STRING);
begin
log.Lines.Add(SmSG);
end;
procedure TForm2.serverBeforeCommandHandler(ASender: TIdTCPServer;
const AData: String; AThread: TIdPeerThread);
begin
writelog('beforecommand '+adata+' '+athread.Connection.LocalName+inttostr(asender.defaultport));
end;
procedure TForm2.serverConnect(AThread: TIdPeerThread);
begin
writelog('onconnect');
end;
procedure TForm2.serverDisconnect(AThread: TIdPeerThread);
begin
writelog('ondisconnect');
end;
procedure TForm2.serverStatus(ASender: TObject; const AStatus: TIdStatus;
const AStatusText: String);
begin
st.Panels[0].Text:=IdStati[astatus];
st.Panels[1].Text:=AStatusText;
end;
procedure TForm2.serverExecute(AThread: TIdPeerThread);
var s:string;
aValues:tstrings;
t:Tfilestream;
t1:tmemorystream;
sFile,sDestdir:string;
buf:array [0..1024] of byte;
iCount,iread,iSIze:integer;
begin
writelog('onexecuteBegin');
//while (not athread.Terminated) and (athread.Connection.Connected) do
//athread.Connection.
s:=athread.Connection.ReadLn;
{if s='' then
BEGIN
Writelog('onrEADTIMEOUT');
athread.Resume;
EXIT;
END;
}
if uppercase(s)='ECHO' then
begin
s:=athread.Connection.ReadLn;//(#0,1000);
recv.Lines.Add(s);
s:='TimeStamp:'+formatdatetime('yyyy-mm-dd',now)+s;
athread.Connection.WriteLn('ECHO:'+s);
end
else
if uppercase(s)='MEMO' then
begin
aValues:=tstringlist.create;
try
athread.Connection.readstrings(aValues);//(#0,1000);
recv.Lines.AddStrings(avalues);
athread.Connection.WriteLn('MEMO:'+INTTOSTR(avalues.count)+'line');
finally
aValues.free;
end;
end
else
if uppercase(s)='FILE' then
begin
sFile:=athread.Connection.readLn;
sDestDir:=athread.Connection.readln;
if not directoryExists(getcurrentdir+'\'+sDestDir) then
forcedirectories(getcurrentdir+'\'+sdestdir);
t:=Tfilestream.create(getcurrentdir+'\'+sDestDir+'\'+extractfilename(sfile),fmOpenWrite or fmCreate );
athread.Connection.ReadStream(t);
athread.Connection.WriteLn('File:'+INTTOSTR(t.Size)+'Bytes');
t.Free;
end
else
if uppercase(s)='ADOFILE' then
begin
//sFile:=athread.Connection.readLn;
//sDestDir:=athread.Connection.readln;
//if not directoryExists(getcurrentdir+'\'+sDestDir) then
//forcedirectories(getcurrentdir+'\'+sdestdir);
t1:=Tmemorystream.create;
athread.Connection.ReadStream(t1);
athread.Connection.WriteLn('File:'+INTTOSTR(t1.Size)+'Bytes');
clientdataset1.LoadFromstream(t1);
clientdataset1.open;
//t1.Free;
//clientdataset1.close;
end
else
if uppercase(s)='FILELARGE' then
begin
sFile:=athread.Connection.readLn;
sDestDir:=athread.Connection.readln;
IsIZE:=athread.Connection.readINTEGER;
if not directoryExists(getcurrentdir+'\'+sDestDir) then
forcedirectories(getcurrentdir+'\'+sdestdir);
t:=Tfilestream.create(getcurrentdir+'\'+sDestDir+'\'+extractfilename(sfile),fmOpenWrite or fmCreate );
iRead:=0;
while iRead<isize do
begin
if isize-iread>=length(buf) then
iCount:=length(buf)
else
iCount:=isize-iread;
athread.Connection.ReadBuffer(buf,iCount);
iRead:=iRead+iCount;
t.writeBuffer(buf,iCount);
end;
athread.Connection.WriteLn('File:'+INTTOSTR(t.Size)+'Bytes');
t.Free;
end;
Writelog('onexecuteEnd');
end;
procedure TForm2.FormCreate(Sender: TObject);
begin
try
server.defaultport:=serverport;
server.Active:=true;
label1.Caption:='started';
except
writelog('No start');
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -