close

使用idTCPClient/idTCPServer 傳送檔名及檔案範例

 

Client端

procedure Tfrm_TCPClient.Button1Click(Sender: TObject);
var
  fn: String;
  fs: TFileStream;
begin
  if not OpenDialog1.Execute then Exit;
  fn := OpenDialog1.FileName;
  log('Open File ' + fn);
  fs := TFileStream.Create(fn, fmOpenRead or fmShareExclusive);
  fs.Position := 0;
  try
    log('Connect');
    IdTCPClient1.Connect();
    log('Send Filename ' + ExtractFileName(fn));
    IdTCPClient1.WriteLn(ExtractFileName(fn)); //傳檔名
    fn := IdTCPClient1.ReadLn(); //接收伺服器回應
    if fn <> 'OK' then Exit;
    log('Send File Start');
    IdTCPClient1.WriteStream(fs);
    log('Send File End');
  finally
    IdTCPClient1.Disconnect;
  end;
end;

 


Server端

 

procedure Tfrm_TCPServer.IdTCPServer1Execute(AThread: TIdPeerThread);
var
  fs: TFileStream;
  size: integer;
  Filename: string;
begin
  try
    Filename := AThread.Connection.ReadLn(); //先收檔名
    Log('Server Recv ' + Filename);

    fs := TFileStream.Create('C:/' + Filename, fmCreate);
    fs.Seek(0, soFromBeginning);
    fs.Size := 0;

    AThread.Connection.WriteLn('OK'); //收到檔名
    Log('Recv Start');
    AThread.Connection.ReadStream(fs, -1, True);
    Log('Recv End');
  finally
    fs.Free;
  end;
end;

arrow
arrow
    文章標籤
    delphi Tcp FileStream
    全站熱搜

    抓狂小白 發表在 痞客邦 留言(0) 人氣()