使用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;
- 上一篇:利用鼠标键盘钩子截获密码
- 下一篇:计算机毕业论文:Delphi