首页
杂志网
当前位置:首页>>计算机技术>使用indy的IdTcpServer,IdTcpclient传输文件>正文

使用indy的IdTcpServer,IdTcpclient传输文件

来源:杂志发表网时间:2015-12-21 所属栏目:计算机技术

  

接受部分(有个用户和密码check,你取消就可以)
procedure TTCP_Server.IdTCPServerExecute(AThread: TIdPeerThread);
var
 FStream  : TFileStream;
 FileName  : String;
 CmdStr   : String;
begin
  CmdStr :=AThread.Connection.ReadLn();
  if CompareStr(Copy(CmdStr,1,6),'<SEND>')=0 then
   begin //1
    Delete(CmdStr,1,6);
    Cmd := '上传文件';
    FileName := CmdStr;
    if FileExists(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
  else if CompareStr(Copy(CmdStr,1,6),'<AGET>')=0 then
   begin //2
    Delete(CmdStr,1,6);
    Cmd := '下载文件';
    FileName := CmdStr;
    if FileExists(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
  else if CompareStr(Copy(CmdStr,1,6),'<USER>')=0 then
   begin //3
    Delete(CmdStr,1,6);
    User := UpperCase(Trim(DecryptString(CmdStr,20504))); //CmdStr;
    if CompareStr(User,'XDM')=0 then
      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
  else if CompareStr(Copy(CmdStr,1,6),'<PASS>')=0 then
   begin //4



    Delete(CmdStr,1,6);
    Password := DecryptString(CmdStr,20504); //CmdStr;
    if CompareStr(Password,'123abc')=0 then
      begin
       Memo1.Lines.Add('Login..........Accepted');
       Memo1.Lines.Add('Connected......'+DateTimeToStr(Now));
       CmdStr := '';
       AThread.Connection.WriteLn('<Accepted>');
      end
    else
      begin
       Memo1.Lines.Add('Password Wrong...Login Failure');
       AThread.Connection.WriteLn('<Failed>');
       CmdStr :='';
       AThread.Connection.Disconnect;
      end;
   end;  //4
end;

主要发送部分
procedure TTCP_Client.BtnSendClick(Sender: TObject);
var
 FStream : TFileStream;
begin
 if IdTcpClient.Connected then begin
   IdTcpClient.WriteLn('<SEND>'+ExtractFileName(FileName));
   if FileName = '' then
    MessageBox(Handle,'没有选择文件','Error',MB_OK)
   else begin
      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('Transferred OK');
     end;
 end
 else
  begin
   MessageBox(Handle,'没有连接服务器','Error',MB_Ok);
  end;
end;


点此咨询学术顾问 快人一步得到答案

SCI期刊问答

回到顶部