⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 userver.pas

📁 轻巧的TCP 客户端与服务器端通讯测试套件.可以在两处分别安装客户端与服务器端,就可以测试TCP是否可以通讯了.采用了INDY的TCP套件完成
💻 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 + -