使用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;