Cita:
Empezado por kdemia
que tal gente, bueno acudo nuevamente a ustedes para que me ayuden en mi problema:
necesito mandar una imagen.. bien?, bueno a la imagen la transformo en un stream y la mando algo asi
Código Delphi [-]ClientSocket.Socket.SendStream(ImgStream)
el tema es que no tengo una manera, o por lo menos la desconosco, de leer el stream, es decir recivirlo algo asi:
Código Delphi [-]Imagen.Picture.Bitmap.Assign(ServerSocket.Socket.ReceiveStream)
pasa que la supuesta funcion ServerSocket.Socket.ReceiveStream no existe XD .. como puedo hacer? si alguien se le ocurre.
Saludos
|
revisa esta forma de hacerlo
http://www.delphi3000.com/articles/article_2313.asp?SK=
Código Delphi
[-]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ScktComp, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
Image1: TImage;
Image2: TImage;
ClientSocket1: TClientSocket;
ServerSocket1: TServerSocket;
Button1: TButton;
procedure Image1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
private
Reciving: boolean;
DataSize: integer;
Data: TMemoryStream;
public
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Image1Click(Sender: TObject);
begin
ClientSocket1.Active:= true;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ServerSocket1.Active:= true;
end;
procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Socket.SendText('send');
end;
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var
s, sl: string;
begin
s:= Socket.ReceiveText;
if not Reciving then
begin
SetLength(sl, StrLen(PChar(s))+1); StrLCopy(@sl[1], PChar(s), Length(sl)-1);
DataSize:= StrToInt(sl);
Data:= TMemoryStream.Create;
Delete(s, 1, Length(sl));
Reciving:= true;
end;
try
Data.Write(s[1], length(s));
if Data.Size = DataSize then
begin
Data.Position:= 0;
Image2.Picture.Bitmap.LoadFromStream(Data);
Data.Free;
Reciving:= false;
Socket.Close;
end;
except
Data.Free;
end;
end;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
ms: TMemoryStream;
begin
if Socket.ReceiveText = 'send' then
begin
ms:= TMemoryStream.Create;
try
Image1.Picture.Bitmap.SaveToStream(ms);
ms.Position:= 0;
Socket.SendText(IntToStr(ms.Size) + #0);
Socket.SendStream(ms);
except
ms.Free;
end;
end;
end;
end.