TMemoryStream
8 отговора
315 прегледа
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;
Къде бъркам?

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;
Къде бъркам?
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;
Re: TMemoryStream
Мне...и още нещо иска. Пак не върви...
Изобщо правилен ли ми е подхода?!
Изобщо правилен ли ми е подхода?!
Предположение...
Има ли вероятност да ти залепя файла зад '!scr' и да получаваш всичко оше при ReceiveText?
Re: TMemoryStream
хех... имах подобен случай и аз, исках да предавам TMemoryStream, но уви не ставаше по никакъв начин!!!
затова накрая си го направих по най балъшкия начин -
Отварям си файла в бинарен формат и си го предавах на пакети... так разботи без проблем :)
Друго си е....
затова накрая си го направих по най балъшкия начин -
Отварям си файла в бинарен формат и си го предавах на пакети... так разботи без проблем :)
Друго си е....
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!
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!
Re: TMemoryStream
Stream-a май се освобождава от клиента. Купи си от пл. Славейков Mastering Delphi (2 тухлички) на Марко Канту и ги изяш с кориците.