Client:procedure TClientThread.DoSave;
var
sFilePath, sFileName: string;
begin
sFilePath := 'E://test.txt'; //调用Poineer获取文件路径FilePath
sFileName := '1.txt';
if UpLoadFile(sFilePath) then
begin
Insert(frmMain.mmoLog.Lines.Count, FRequest.Text);
FResponse.Clear;
FResponse.Add('[Response]');
FResponse.Add('Command=SaveData');
FResponse.Add('FileName=' + sFileName);
FResponse.Add('Result=OK');
end
else
begin
Insert(frmMain.mmoLog.Lines.Count, FRequest.Text);
FResponse.Clear;
FResponse.Add('[Response]');
FResponse.Add('Command=SaveData');
FResponse.Add('Result=Fail');
end;
SendResponse;
end;function TClientThread.UpLoadFile(sFileName: string):Boolean;
var
FStream: TFileStream;
begin
Result := False;
if sFileName = '' then
begin
Insert(frmMain.mmoLog.Lines.Count, '无法获取需要上传的文件路径!');
Exit;
end;
try
FStream := TFileStream.Create(sFileName, fmOpenRead);
FStream.Position := 0;
FStream.Seek(0,0);
FClient.WriteStream(FStream, True, True);
finally
FStream.Free;
end;
Result := True;
end; procedure TClientThread.SendResponse;
var
Len: Integer;
Stream: TStringStream;
begin
Stream := TStringStream.Create('');
Len := Length(FResponse.Text);
Len := htons(Len);
Stream.WriteBuffer(Len, SizeOf(Len));
Stream.WriteString(FResponse.Text);
FClient.WriteStream(Stream);
Stream.Free;
end;Server:Len := 0;
AThread.Connection.ReadBuffer(Len, SizeOf(Buf));
Len := ntohs(Len);
Buf.Text := AThread.Connection.ReadString(Len);
if Buf.Values['Result'] = 'OK' then
begin
try
FStream := TFileStream.Create(ExtractFilePath(Application.ExeName)+Buf.Values['FileName'],FmCreate);
AThread.Connection.ReadStream(FStream, 2048, False);
finally
FStream.Free;
end;
end;
mmoLog.Lines.Add(Buf.Text);
我现在面临的问题就是,客户端多次使用WriteStream方法,所以在服务器使用ReadString()获取的结果与预想的不一致,请问应该怎么处理这个问题
var
sFilePath, sFileName: string;
begin
sFilePath := 'E://test.txt'; //调用Poineer获取文件路径FilePath
sFileName := '1.txt';
if UpLoadFile(sFilePath) then
begin
Insert(frmMain.mmoLog.Lines.Count, FRequest.Text);
FResponse.Clear;
FResponse.Add('[Response]');
FResponse.Add('Command=SaveData');
FResponse.Add('FileName=' + sFileName);
FResponse.Add('Result=OK');
end
else
begin
Insert(frmMain.mmoLog.Lines.Count, FRequest.Text);
FResponse.Clear;
FResponse.Add('[Response]');
FResponse.Add('Command=SaveData');
FResponse.Add('Result=Fail');
end;
SendResponse;
end;function TClientThread.UpLoadFile(sFileName: string):Boolean;
var
FStream: TFileStream;
begin
Result := False;
if sFileName = '' then
begin
Insert(frmMain.mmoLog.Lines.Count, '无法获取需要上传的文件路径!');
Exit;
end;
try
FStream := TFileStream.Create(sFileName, fmOpenRead);
FStream.Position := 0;
FStream.Seek(0,0);
FClient.WriteStream(FStream, True, True);
finally
FStream.Free;
end;
Result := True;
end; procedure TClientThread.SendResponse;
var
Len: Integer;
Stream: TStringStream;
begin
Stream := TStringStream.Create('');
Len := Length(FResponse.Text);
Len := htons(Len);
Stream.WriteBuffer(Len, SizeOf(Len));
Stream.WriteString(FResponse.Text);
FClient.WriteStream(Stream);
Stream.Free;
end;Server:Len := 0;
AThread.Connection.ReadBuffer(Len, SizeOf(Buf));
Len := ntohs(Len);
Buf.Text := AThread.Connection.ReadString(Len);
if Buf.Values['Result'] = 'OK' then
begin
try
FStream := TFileStream.Create(ExtractFilePath(Application.ExeName)+Buf.Values['FileName'],FmCreate);
AThread.Connection.ReadStream(FStream, 2048, False);
finally
FStream.Free;
end;
end;
mmoLog.Lines.Add(Buf.Text);
我现在面临的问题就是,客户端多次使用WriteStream方法,所以在服务器使用ReadString()获取的结果与预想的不一致,请问应该怎么处理这个问题
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货