TMemoryStream

8 отговора 315 прегледа
#1

TMemoryStream

Здравейте. Пиша приложение, на Delphi 6, състоящо се от клиент и сървър. С предаването на текст нямам проблем (то и с това ако имах...), но се наложи освен текст, да се изпраща файл, от сървъра към клиента. За тази цел :
fJPEG.Assign(Image1.Picture.Bitmap);
fJPEG.CompressionQuality:=20;
fJPEG.Compress;
Stream:=TMemoryStream.Create;
fJPEG.SaveToStream(stream);
Socket.SendText('!scr'); // предупреждавам клиента, да очаква Stream
Socket.SendStream(stream);
Stream.Free;


Клиента трябва да получи този поток, и след това да го съхрани във файл. Обаче работата не се сработва, файл се съхранява, но в празен - 0 байта. Ето и частта от клиента:

Line:=Socket.ReceiveText;
If Pos('!scr',line)=1 then
Begin
fJPEG:=TJPEGImage.Create;
inc(scrC);
Stream := TMemoryStream.Create;
Screen.Cursor:=crHourGlass;
try
While TRUE do
Begin
nReceived:=Client.Socket.ReceiveBuf(buffer,SizeOf(buffer));
if nReceived <= 0 then
Break
else
Stream.Write(buffer,nReceived);
sleep(200);
End;
fJPEG.LoadFromStream(stream);
fJPEG.SaveToFile('C:\screen'+IntToStr(scrC)+'.jpg');
finally
Stream.free;
Screen.Cursor:=crDefault;
end;
end;


Къде бъркам?

Отговор
в отговор на ShaDoW #2

Re: TMemoryStream

fJPEG.SaveToStream(stream); - ne sym siguren, no may se pozicionira v kraya na STream-a, predi da go izpratish se vyrni v nachaloto, nyamam delphi tuk, no may beshe neshto takova : STream.pos := 0;

Отговор
в отговор на ss #3

Re: TMemoryStream

май така беше...като се прибера ще го пробвам. Благодаря.

Отговор
в отговор на ss #4

Re: TMemoryStream

Мне...и още нещо иска. Пак не върви...
Изобщо правилен ли ми е подхода?!

Отговор
в отговор на ShaDoW #5

Предположение...

Има ли вероятност да ти залепя файла зад '!scr' и да получаваш всичко оше при ReceiveText?

Отговор
в отговор на ShaDoW #6

Re: TMemoryStream

хех... имах подобен случай и аз, исках да предавам TMemoryStream, но уви не ставаше по никакъв начин!!!
затова накрая си го направих по най балъшкия начин -
Отварям си файла в бинарен формат и си го предавах на пакети... так разботи без проблем :)


Друго си е....
Отговор
в отговор на Heзнaeн #7

Re: TMemoryStream

Deca, ako shte pishete client/server naj dobre e da zabrawite za borlandskite komponenti za raboti s soketi...prosto te ne rabotqt kakto ochakwate
s mojta biblioteka wsichko si raboti na 6 primer moje da se widi na
[линк]
a neobhodimite pas fajlowe za kompilaciq estestweno mogat da se namerqt w
[линк]

------------------------------
I got a COMPILER, and I'm not afraid to use it!
Отговор
в отговор на ShaDoW #8

Re: TMemoryStream

[линк]

чети и дишай по-леко
Отговор
в отговор на ShaDoW #9

Re: TMemoryStream

Stream-a май се освобождава от клиента. Купи си от пл. Славейков Mastering Delphi (2 тухлички) на Марко Канту и ги изяш с кориците.

Отговор