![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TMemoryStream TidTCPClient..server [D7, XP]
Fl@sh © (2006-03-29 19:00:00)На сервере обработчик:
procedure TForm1.ITCPSTIdCommandLoadFromDBKlientCommand(
ASender: TIdCommand);
var
DataModule: TDataModule1;
i: integer;
SL: TStringList;
ipRR: string;
ms: TMemoryStream;
begin
DataModule := TDataModule1.Create(nil);
try
ipRR := ASender.Params[0];
with DataModule.IBQuery do
begin
Close;
SQL.Clear;
SQL.Text := 'SELECT * FROM KLIENT WHERE "RR"=' + ipRR;
Open;
end;
SL := TStringList.Create;
ms := TMemoryStream.Create;
try
try
for i := 0 to DataModule.IBQuery.FieldCount - 1 do
SL.Add(DataModule.IBQuery.Fields[i].AsString);
SL.Add('asdf');
SL.SaveToStream(ms);
ASender.Thread.Connection.WriteStream(ms, True, False);
except
on E: Exception do
Writeln('Error:' + e.Message);
end;
finally
SL.Free;
ms.Free;
end;
finally
DataModule.Free;
end;
end;
На клиенте:
procedure TfmServer.Button5Click(Sender: TObject);
var
i : Integer;
ms: TMemoryStream;
SL: TStringList;
begin
fmServer.IdTCPClient.Connect;
fmServer.IdTCPClient.SendCmd('select 2345');
ms := TMemoryStream.Create;
try
// ms.Position := 0;
fmServer.IdTCPClient.ReadStream(ms);
SL.LoadFromStream(ms);
//Memo1.Lines.LoadFromStream(ms);
finally
SL.Free;
ms.Free;
end;
end;
Вискакивает error на строчке SL.LoadFromStream(ms);
..excepion with message "Out of memory while expanding memory stream". Use step..
Как лечить?
Fl@sh (2006-03-29 22:37:00) [1]
> tesseract © (29.03.06 21:50) [5]
Спасибо большое за пример
Кому интересно, вот как надо:
...
try
fmServer.IdTCPClient.ReadStream(ms, ms.Size, False);
ms.Position := 0;
SL.LoadFromStream(ms);
finally
...
tesseract (2006-03-29 21:50:00) [2]Пример из help по TCPClient по indy 9
if bSizeKnown then
// read known data size
AConnection.ReadStream(AStream, ABytes, False)
else
// read all data until disconnected
AConnection.ReadStream(AStream, -1, True);
Fl@sh (2006-03-29 20:44:00) [3]
> кстати, SL создается?
Уже да, я забыл про него, хотя суть не в этом, я еще даже к SL не обращался.
antonn_ (2006-03-29 20:24:00) [4]кстати, SL создается?
по проблеме - не знаю, я с ТЦП не работал...
Fl@sh (2006-03-29 20:02:00) [5]Вот так:
procedure TfmServer.Button5Click(Sender: TObject);
var
i : Integer;
ms: TMemoryStream;
SL: TStringList;
begin
fmServer.IdTCPClient.Connect;
fmServer.IdTCPClient.SendCmd('select 2345');
ms := TMemoryStream.Create;
try
fmServer.IdTCPClient.ReadStream(ms); //Ошибка та же что и в [0]
ms.Position := 0;
SL.LoadFromStream(ms);
finally
SL.Free;
ms.Free;
end;
end;
Не помогло :)
antonn (2006-03-29 19:48:00) [6]комментарий убрать
fmServer.IdTCPClient.ReadStream(ms);
ms.Position := 0;
SL.LoadFromStream(ms);