使用indy的IdTcpServer,IdTcpclient传输文件

时间:2022-11-17 10:27:00

使用indy的IdTcpServer,IdTcpclient传输文件

使用indy的IdTcpServer,IdTcpclient传输文件

接受部分(有个用户和密码check,你取消就可以)

procedureTTCP_Server.IdTCPServerExecute(AThread:TIdPeerThread);

var

FStream:TFileStream;

FileName:String;

CmdStr:String;

begin

CmdStr:=AThread.Connection.ReadLn();

ifCompareStr(Copy(CmdStr,1,6),''''<SEND>'''')=0then

begin//1

Delete(CmdStr,1,6);

Cmd:=''''上传文件'''';

FileName:=CmdStr;

ifFileExists(ExtractFilePath(Application.ExeName)+FileName)then

DeleteFile(ExtractFilePath(Application.ExeName)+FileName);

try

FStream:=TFileStream.Create(ExtractFilePath(Application.ExeName)+FileName,FmCreate);

AThread.Connection.ReadStream(FStream,2048,true);

Finally

FStream.Free;

AThread.Connection.Disconnect;

end;

end//1

elseifCompareStr(Copy(CmdStr,1,6),''''<AGET>'''')=0then

begin//2

Delete(CmdStr,1,6);

Cmd:=''''下载文件'''';

FileName:=CmdStr;

ifFileExists(ExtractFilePath(Application.ExeName)+FileName)then

begin

try

FStream:=TFileStream.Create(ExtractFilePath(Application.ExeName)+FileName,FmOpenRead);

AThread.Connection.WriteStream(FStream,True,False);

Finally

FStream.Free;

AThread.Connection.Disconnect;

end;

end

else

begin

AThread.Connection.WriteLn(''''Failed'''');

AThread.Connection.Disconnect;

end;

end//2

elseifCompareStr(Copy(CmdStr,1,6),''''<USER>'''')=0then

begin//3

Delete(CmdStr,1,6);

User:=UpperCase(Trim(DecryptString(CmdStr,20504)));//CmdStr;

ifCompareStr(User,''''XDM'''')=0then

begin

Memo1.Lines.Add(''''User:''''+User);

CmdStr:='''''''';

end

else

begin

Memo1.Lines.Add(''''User:''''+User+''''非法登陆,已关闭连接'''');

CmdStr:='''''''';

AThread.Connection.WriteLn(''''<Failed>'''');

AThread.Connection.Disconnect;

end;

end//3

elseifCompareStr(Copy(CmdStr,1,6),''''<PASS>'''')=0then

begin//4

Delete(CmdStr,1,6);

Password:=DecryptString(CmdStr,20504);//CmdStr;

ifCompareStr(Password,''''123abc'''')=0then

begin

Memo1.Lines.Add(''''Login..........Accepted'''');

Memo1.Lines.Add(''''Connected......''''+DateTimeToStr(Now));

CmdStr:='''''''';

AThread.Connection.WriteLn(''''<Accepted>'''');

end

else

begin

Memo1.Lines.Add(''''PasswordWrong...LoginFailure'''');

AThread.Connection.WriteLn(''''<Failed>'''');

CmdStr:='''''''';

AThread.Connection.Disconnect;

end;

end;//4

end;

主要发送部分

procedureTTCP_Client.BtnSendClick(Sender:TObject);

var

FStream:TFileStream;

begin

ifIdTcpClient.Connectedthenbegin

IdTcpClient.WriteLn(''''<SEND>''''+ExtractFileName(FileName));

ifFileName=''''''''then

MessageBox(Handle,''''没有选择文件'''',''''Error'''',MB_OK)

elsebegin

try

FStream:=TFileStream.Create(FileName,FmOpenRead);

FStream.Position:=0;

FStream.Seek(0,0);

IdTcpClient.WriteStream(FStream,true,false);

Finally

FStream.Free;

IdTcpClient.Disconnect;

end;

Memo1.Lines.Add(''''TransferredOK'''');

end;

end

else

begin

MessageBox(Handle,''''没有连接服务器'''',''''Error'''',MB_Ok);

end;

end;