使用indy的IdTcpServer,IdTcpclient傳輸文件
時(shí)間:2022-11-17 10:27:00
導(dǎo)語:使用indy的IdTcpServer,IdTcpclient傳輸文件一文來源于網(wǎng)友上傳,不代表本站觀點(diǎn),若需要原創(chuàng)文章可咨詢客服老師,歡迎參考。
使用indy的idtcpserver,idtcpclient傳輸文件
接受部分(有個(gè)用戶和密碼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+''''非法登陸,已關(guān)閉連接'''');
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;
主要發(fā)送部分
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,''''沒有連接服務(wù)器'''',''''Error'''',MB_Ok);
end;
end;